角度自定义指令控制器不响应ng-click

时间:2015-04-02 15:18:44

标签: angularjs angularjs-directive

我有一个自定义指令,我指定了控制器。我在控制器中设置的属性在模板中插入正常,但功能不响应模板的点击。我使用角度版本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}}内插就好了。

1 个答案:

答案 0 :(得分:1)

我已经解决了我的问题。我没有在我的问题中包含这个,因为我认为这是无关紧要的。每当用户触发它时,我都会从dom中删除并重新添加我的popover。起初,我只是使用像popover.parentNode.removeChild(popover)这样的常规dom运算符;这些具有不破坏范围的副作用。然后我jquery包装我的元素并开始使用popover.remove(); Angular patched jquery的删除功能也会破坏范围。由于该元素仍然存在于内存中,因此当我将其重新添加到dom时,插入到其上的字符串会保留在该元素上,但该范围的其余部分未被复制。