如何从属性指令更改元素的范围?

时间:2013-04-15 21:09:10

标签: angularjs angularjs-directive angularjs-scope

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


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

现在,范围将被myDir覆盖,foo将不会在屏幕上更新。但是,具有my-dir属性的每个控件仍应在隔离范围内具有customFunction

有可能吗?

1 个答案:

答案 0 :(得分: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';
}

Fiddle

另见When writing a directive in AngularJS, how do I decide if I need no new scope, a new child scope, or a new isolated scope?