AngularJS:在 element.append 内添加一次点击
AngularJS: Adding ng-click within element.append
在我的指令中,我有以下代码,将用于不断附加到 html 元素。
//Establishes the type of question and therefore what should be displayed
app.directive('questionType', function ($http, $compile) {
return {
restrict: 'A',
link: function (scope, element, attr, model) {
switch (scope.Question.inputType) {
case 'checkbox':
//element.append('<input type="checkbox" ng-model="Question.checked"/><button ng-if="input.checked" >X</button>');
break;
case 'text':
element.append('<button class="btn btn-info" ng-click="selectProperties()" title="Assign this user"><span class="glyphicon glyphicon-user"></span>Assignment</button>');
break;
}
}
};
});
因此,当我单击按钮时,应该调用 selectproperties 函数,该函数位于要附加的元素周围的控制器内。但是它没有被调用,而且我知道该功能可以正常工作,因为如果我将此按钮代码直接放入 html 页面,它就会工作。
我已经看到使用 $compile 是解决这个问题的一种方法,但是当我使用它时它只会导致我的网页冻结,并且控制台中不会出现任何错误。
我尝试了其他几种方法,例如将带有该方法的控制器添加到我的指令中 -
controller: function ($scope, $element) {
$scope.selectProperties = function () {
aler('test');
}
}
但这也没有用。而且我需要能够使用函数调用来更新我的主控制器中的对象,所以我不确定我是否可以那样做。
有什么想法吗?
您应该 compile
html 将 directives
像 ng-click
一样绑定到范围属性。其他副 angular 指令将不会绑定到范围属性。
var strElm = '<button class="btn btn-info" ng-click="selectProperties()" title="Assign this user"><span class="glyphicon glyphicon-user"></span>Assignment</button>';
var compiledHtml = $compile(strElm);
element.append(compiledHtml);
和不要从指令中删除$compile
服务,
你的代码应该是这样的,
//Establishes the type of question and therefore what should be displayed
app.directive('questionType', function($http, $compile) {
return {
restrict: 'A',
link: function(scope, element, attr, model) {
switch (scope.Question.inputType) {
case 'checkbox':
//element.append('<input type="checkbox" ng-model="Question.checked"/><button ng-if="input.checked" >X</button>');
break;
case 'text':
var strElm = '<button class="btn btn-info" ng-click="selectProperties()" title="Assign this user"><span class="glyphicon glyphicon-user"></span>Assignment</button>';
var compiledHtml = $compile(strElm);
element.append(compiledHtml);
break;
}
}
};
});
在我的指令中,我有以下代码,将用于不断附加到 html 元素。
//Establishes the type of question and therefore what should be displayed
app.directive('questionType', function ($http, $compile) {
return {
restrict: 'A',
link: function (scope, element, attr, model) {
switch (scope.Question.inputType) {
case 'checkbox':
//element.append('<input type="checkbox" ng-model="Question.checked"/><button ng-if="input.checked" >X</button>');
break;
case 'text':
element.append('<button class="btn btn-info" ng-click="selectProperties()" title="Assign this user"><span class="glyphicon glyphicon-user"></span>Assignment</button>');
break;
}
}
};
});
因此,当我单击按钮时,应该调用 selectproperties 函数,该函数位于要附加的元素周围的控制器内。但是它没有被调用,而且我知道该功能可以正常工作,因为如果我将此按钮代码直接放入 html 页面,它就会工作。
我已经看到使用 $compile 是解决这个问题的一种方法,但是当我使用它时它只会导致我的网页冻结,并且控制台中不会出现任何错误。
我尝试了其他几种方法,例如将带有该方法的控制器添加到我的指令中 -
controller: function ($scope, $element) {
$scope.selectProperties = function () {
aler('test');
}
}
但这也没有用。而且我需要能够使用函数调用来更新我的主控制器中的对象,所以我不确定我是否可以那样做。
有什么想法吗?
您应该 compile
html 将 directives
像 ng-click
一样绑定到范围属性。其他副 angular 指令将不会绑定到范围属性。
var strElm = '<button class="btn btn-info" ng-click="selectProperties()" title="Assign this user"><span class="glyphicon glyphicon-user"></span>Assignment</button>';
var compiledHtml = $compile(strElm);
element.append(compiledHtml);
和不要从指令中删除$compile
服务,
你的代码应该是这样的,
//Establishes the type of question and therefore what should be displayed
app.directive('questionType', function($http, $compile) {
return {
restrict: 'A',
link: function(scope, element, attr, model) {
switch (scope.Question.inputType) {
case 'checkbox':
//element.append('<input type="checkbox" ng-model="Question.checked"/><button ng-if="input.checked" >X</button>');
break;
case 'text':
var strElm = '<button class="btn btn-info" ng-click="selectProperties()" title="Assign this user"><span class="glyphicon glyphicon-user"></span>Assignment</button>';
var compiledHtml = $compile(strElm);
element.append(compiledHtml);
break;
}
}
};
});