我的指令没有解雇

时间:2015-02-11 07:04:38

标签: javascript angularjs

我想用我的指令重新创建nsClick行为(改变优先级)。 所以这是我的代码:

angular.module('MyApp').directive('nsClickHack', function () {
return {
    restrict: 'E',
    priority: 100,
    replace: true,
    scope: {
        key: '=',
        value: '=',
        accept: "&"
    },
    link: function ($scope, $element, $attrs, $location) {
        $scope.method();
    }
}
});

和我想要绑定的行:

<li ng-repeat="item in items" ns-click-hack="toggle(); item.action()">

toggleitem.action来自其他指令。

你能指出我犯错的地方吗?

1 个答案:

答案 0 :(得分:2)

如果您尝试重新创建ng-click,那么查看source of the ngClick directive可能会更好。

例如,它不会创建隔离范围,因为只能在元素上创建一个隔离范围,并且它会尝试适应其他指令。另一种方法是$parse属性值,这是内置实现正在做的事情。

如果你只是在创造一个可怜的男人&#34;那么,ngClick的版本,你可以使用在作用域上定义的回调函数"&",并在单击该元素时调用它:

.directive("nsClickHack", function(){
  return {
    restrict: "A",
    scope: {
      clickCb: "&nsClickHack"
    },
    link: function(scope, element){
      element.on("click", function(e){
        scope.clickCb({$event: e}); // ngClick also passes the $event var
      });
    }
  }
});

用法就像你似乎想要的那样:

<li ng-repeat="item in items" ns-click-hack="toggle(); item.action()">

plunker