gpt4 book ai didi

javascript - 按钮点击没有正确调用我的 Angular Directive(指令)

转载 作者:可可西里 更新时间:2023-11-01 13:21:49 24 4
gpt4 key购买 nike

使用此页面作为引用,How to add div with a button click in angularJs

我创建了一个 Angular Directive(指令),用于在单击按钮时将一个 div 添加到我的 html 页面。但是,当我单击按钮时,什么也没有发生。我的最终目标是能够添加许多 Column div。这是我的代码。调试器中没有其他错误,似乎我没有正确绑定(bind)到点击事件。

我从这两个调用中得到的数据都是字符串数组,

$scope.dataTypes = {"String", "Boolean", "Integer"}
$scope.generatorTypes = {"StringGenerator", "IntegerGenerator", "BooleanGenerator"}

代码

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<script src="~/Scripts/angular.js"></script>
<script>
function GetDataTypes($scope, $http) {
$scope.selectedDataType = null;
$scope.dataTypes = [];
$scope.TemplateName = 'NameTest';
$scope.ColumnCount = '20';
$http({
method: 'GET',
url: 'http://localhost:60568/source/types'
}).then(function (result) {
$scope.dataTypes = result.data.Result;
console.log($scope.dataTypes);
});

$scope.selectedDataTypeChanged = function () {
$scope.generatorTypes = []
console.log($scope.selectedDataType);
$http({
method: 'GET',
url: 'http://localhost:60568/source/generator?datatype='+$scope.selectedDataType
}).then(function (result) {
$scope.generatorTypes = result.data.Result;
console.log($scope.dataTypes);
});
}
}

var myApp = angular.module("myApp", []);
myApp.controller("GetDataTypes", GetDataTypes);

myApp.directive('addColumn', function () {
return {
restrict: 'A',
scope: true,
template:
'<div id="Column">'+
'<hr />'+
'Select DataType :-'+
'<select ng-model="selectedDataType" ng-change="selectedDataTypeChanged()">'+
'<option ng-repeat="dataType in dataTypes">{{ dataType }}</option>'+
'</select>'+
'<br />'+

'Select Generator :-'+
'<select ng-model="selectedGenerator">'+
'<option ng-repeat="generatorType in generatorTypes">{{generatorType}}</option>'+
'</select>'+
'</div>',
controller: function ($scope, $element, $compile) {
$scope.clicked = 0;
$scope.click = function () {
$('body').append($compile($('.Columns').clone())($scope));
}
}
}
})
</script>
</head>

<body ng-app="myApp">
<div id="TemplateCollection" ng-controller="GetDataTypes">
<div id="Template">
TemplateName :- <input ng-model="TemplateName" type="text" id="TemplateName" value="" /><br />
RowCount :- <input ng-model="RowCount" type="text" id="RowCount" value="" /><br />
<button addColumn>Add New Column</button>
<div class="Columns">
<div id="Column">
<hr />
Select DataType :-
<select ng-model="selectedDataType" ng-change="selectedDataTypeChanged()">
<option ng-repeat="dataType in dataTypes">{{ dataType }}</option>
</select>
<br />

Select Generator :-
<select ng-model="selectedGenerator">
<option ng-repeat="generatorType in generatorTypes">{{generatorType}}</option>
</select>
</div>
</div>
</div>
</body>
</html>

最佳答案

这里有几个问题:

  • 按钮有问题 ng-click .您可以检查元素并发现您有:

    <button addcolumn="">Add New Column</button>所以ng-click错过了。

  • 您不能使用上述逻辑将指令作为属性添加到按钮。它可能会导致意外行为。

  • 即使在您的点击生效后,您的 select将重复列表。在这种情况下 jQuery.clone()不会解决它。

  • 使用 jQuery 不是最佳实践,您可以使用单个 document.querySelector

我改变了指令和click方法:

$scope.click = function () {
var el = angular.element('<add-column></add-column>');
el = $compile(el)($scope);
var body = document.querySelector('body');
angular.element(body).append(el);
}

指令调用将是<add-column></add-column>而不是:

<button addColumn>Add New Column</button>

所以你不需要复制你的代码

Demo


全指令

  myApp.directive('addColumn', function ($compile) {
return {
restrict: 'E',
scope: true,
template:
'<div class="Column">'+
'<button ng-click="click()">Add New Column</button>'+
'<hr />'+
'Select DataType :-'+
'<select ng-model="selectedDataType" ng-change="selectedDataTypeChanged()">'+
'<option ng-repeat="dataType in dataTypes">{{ dataType }}</option>'+
'</select>'+
'<br />'+

'Select Generator :-'+
'<select ng-model="selectedGenerator">'+
'<option ng-repeat="generatorType in generatorTypes">{{generatorType}}</option>'+
'</select>'+
'</div>',
link: function ($scope, $element) {
$scope.clicked = 0;

$scope.click = function () {
var el = angular.element('<add-column></add-column>');
el = $compile(el)($scope);
var body = document.querySelector('body');
angular.element(body).append(el);
}
}
}
})

关于javascript - 按钮点击没有正确调用我的 Angular Directive(指令),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45892055/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com