3
<input type='text' ng-model='foo' my-dir='customFunction' />
{{foo}}


.directive('myDir',function(){
     scope:{ customFunc : "&myDir"},
 });

现在范围将被覆盖myDir并且 foo 不会在屏幕上更新。但是每个具有my-dir属性的控件仍然应该customFunction在一个孤立的范围内。

可能吗?

4

1 回答 1

3

正如上面评论中提到的,一个指令可能不会在任何地方都有效。如果该指令将与其他指令(如 ng-model、ng-repeat 等)一起使用,则隔离作用域可能不起作用。下面是一个使用$eval且不创建新范围的指令示例:

<div ng-controller="MyCtrl">
  <input type='text' ng-model='foo' my-dir='customFunction'>
  <br>foo={{foo}}
</div>


app.directive('myDir', function() {
    return {
        link: function(scope, element, attrs) {
            scope.$eval(attrs.myDir);
        },
    }
});


function MyCtrl($scope) {
    $scope.customFunction = alert('hi');
    $scope.foo = '22';
}

小提琴

另请参阅在 AngularJS 中编写指令时,我如何决定是否需要新的作用域、新的子作用域或新的隔离作用域?

于 2013-04-15T22:04:08.210 回答