【发布时间】:2015-04-02 15:18:44
【问题描述】:
我有一个自定义指令,我在其中指定了控制器。我在控制器中设置的属性可以很好地插入模板中,但函数不会响应模板的 ng-click。我正在使用角度版本 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');
};
}]
});
}])
;
我正在创建一个“popover builder”,一个函数,当传递一些参数时,它会返回一个指令定义对象。当我在 angular batarang(stable version) 中检查这个时,$scope.myFn 为空,但定义了 $scope.test。
我觉得这与隔离范围有关,但 {{test}} 插值很好。
【问题讨论】:
-
你一定是某个地方出错了,这看起来很好,打开开发控制台。
-
我可能需要稍微扩展我的示例,编辑传入
-
@aclave1,仍然有效:plnkr.co/edit/0qNtDokIqR8Bv6qmOGgo?p=preview。你能制作出一个能重现问题的 plunker 吗?
标签: angularjs angularjs-directive