Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 如何从属性指令更改元素的范围? {{foo}} .directive('myDir',function(){ 作用域:{customFunc:“&myDir”}, });_Angularjs_Angularjs Directive_Angularjs Scope - Fatal编程技术网

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