【问题标题】:angular custom directive controller not responding to ng-click角度自定义指令控制器不响应 ng-click
【发布时间】: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}} 插值很好。

【问题讨论】:

标签: angularjs angularjs-directive


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-06
    • 1970-01-01
    • 2017-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-11
    • 1970-01-01
    相关资源
    最近更新 更多