2015-04-02 134 views
0

我有一个自定义指令,我指定了控制器。我在控制器中设置的属性可以在模板中进行插值,但功能不响应模板的ng单击。我正在使用角度版本1.3.15。这里是我的问题的归结版本:角度自定义指令控制器没有响应ng-click

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'); 
        }; 
       }] 
      }); 
     }]) 
; 

我创建一个“酥料饼的建设者”,其中,通过当一个函数一些参数,返回一个指令定义对象。当我在角度batarang(稳定版本)中检查这个时,$ scope.myFn为null,但定义了$ scope.test。

我觉得这与隔离范围有关,但{{test}}内插很好。

+0

适合我:http://plnkr.co/edit/ZIGU4TTCIxP2KF1I56rc?p=preview – 2015-04-02 15:24:12

+0

它工作正常 – mohamedrias 2015-04-02 15:24:29

+0

你必须有一个错误,这看起来很好,开放的开发控制台。 – 2015-04-02 15:25:55

回答

1

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