Angularjs 如何从属性指令更改元素的范围? {{foo}} .directive('myDir',function(){ 作用域:{customFunc:“&myDir”}, });
现在,范围将被Angularjs 如何从属性指令更改元素的范围? {{foo}} .directive('myDir',function(){ 作用域:{customFunc:“&myDir”}, });,angularjs,angularjs-directive,angularjs-scope,Angularjs,Angularjs Directive,Angularjs Scope,现在,范围将被myDir覆盖,屏幕上的foo将不会更新。但是,每个具有my dir属性的控件都应该在一个独立的作用域中具有customFunction 有可能吗?正如上面的评论所提到的,一个指令可能不会在任何地方都起作用。如果该指令将与其他指令(如ng model、ng repeat等)一起使用,则隔离作用域可能无法工作。下面是一个使用但不创建新范围的指令示例: <input type='text' ng-model='foo' my-dir='customFunction' />
myDir
覆盖,屏幕上的foo将不会更新。但是,每个具有my dir
属性的控件都应该在一个独立的作用域中具有customFunction
有可能吗?正如上面的评论所提到的,一个指令可能不会在任何地方都起作用。如果该指令将与其他指令(如ng model、ng repeat等)一起使用,则隔离作用域可能无法工作。下面是一个使用但不创建新范围的指令示例:
<input type='text' ng-model='foo' my-dir='customFunction' />
{{foo}}
.directive('myDir',function(){
scope:{ customFunc : "&myDir"},
});
foo={{foo}
app.directive('myDir',function(){
返回{
链接:函数(范围、元素、属性){
范围$eval(attrs.myDir);
},
}
});
函数MyCtrl($scope){
$scope.customFunction=alert('hi');
$scope.foo='22';
}
另请参见您到底想实现什么?是否尝试将指令附加到输入字段,并且希望该指令能够调用父作用域上的方法?如果是这样,您不需要隔离作用域——隔离作用域。我正在尝试将一个指令限制为可以调用该属性中任意函数集的属性。取决于该指令将在何处使用将决定如何编写该指令。如果该指令不与其他指令一起使用,则可以使用隔离作用域。如果它将与其他指令(如ng repeat、ng model和其他指令)一起使用,则可能需要创建一个不创建新范围或创建子范围(而不是隔离范围)的指令。对于非隔离情况,您可以通过属性值传递函数名,然后在链接函数中使用:
scope.$eval(attrs.myDir)
如何创建子作用域?在您的指令中,scope:true
——这将创建一个新的子作用域,该子作用域通常从父作用域继承。默认值(scope:false
)不创建新的作用域——该指令使用与其所用元素相同的作用域。
<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';
}