我有一个自定义指令,我指定了控制器。我在控制器中设置的属性在模板中插入正常,但功能不响应模板的点击。我使用角度版本1.3.15。这是我的问题的简化版本:
myModule.directive('myDirective',function(){
return {
scope:{},
template:
'<div>' +
'<button ng-click="myFn()">click me {{test}}</button>' +
'</div>',
controller:['$scope',function($scope){
$scope.test = "please";
$scope.myFn = function(){
alert('clicked!');
};
}]
};
});
编辑:这是我问题的更完整版本:
module
.provider('PopoverDirectiveBuilder', function () {
this.$get = [function () {
return function directiveBuilder(config) {
var template = config.template;
var controller = config.controller;
return {
restrict: "E",
scope: {},
template:
'<div >' +
template +
'</div>',
controller: controller,
compile: function (tElem, attrs) {
return {
post: function postLink(scope, iElement, iAttrs, controller) {
//add some properties to the controller to handle the directive showing and hiding
}
};
}
};
};
}];
})
.directive('myPopover',['PopoverDirectiveBuilder',function(PopoverDirectiveBuilder){
return PopoverDirectiveBuilder({
template:'<div><button ng-click="myFn()">click me {{test}}</button></div>',
controller:['$scope',function($scope){
$scope.test = "please";
$scope.myFn = function(){
alert('clicked');
};
}]
});
}])
;
我正在创建一个&#34; popover builder&#34;这个函数,当传递一些参数时,返回一个指令定义对象。当我在角度batarang(稳定版本)中检查时,$ scope.myFn为null,但定义了$ scope.test。
我觉得这与隔离范围有关,但{{test}}内插就好了。
答案 0 :(得分:1)
我已经解决了我的问题。我没有在我的问题中包含这个,因为我认为这是无关紧要的。每当用户触发它时,我都会从dom中删除并重新添加我的popover。起初,我只是使用像popover.parentNode.removeChild(popover)这样的常规dom运算符;这些具有不破坏范围的副作用。然后我jquery包装我的元素并开始使用popover.remove(); Angular patched jquery的删除功能也会破坏范围。由于该元素仍然存在于内存中,因此当我将其重新添加到dom时,插入到其上的字符串会保留在该元素上,但该范围的其余部分未被复制。