指令范围

Directive scope

本文关键字:范围 指令      更新时间:2023-12-04

我有一个角度指令和一个绑定到范围变量的形式。代码:

<my-directive></my-directive>
<form>
    <input ng-model="username" required>
</form>

指令:

.directive('myDirective', function(){
    restrict : 'E',
    controller: function($scope){
        console.log($scope.username); // Displays user name, same scope!!!
    },
    link: function(scope, element, attrs){
       // Other codes
    },
    templateUrl: "templates/my-template-url.html"
  }
})

在我的指令中,可以在控制器内部访问username变量。这不是我期望的原因,因为我关闭了指令,它们不应该共享相同的范围?

为什么这样做?

您正在使用scope:false。它可以访问和更改其父作用域。

因此,您的节点作用域在这里并不重要,因为username在它的父作用域中。

<my-directive></my-directive>
<form>
    <input ng-model="username" required>
</form>

如果你不想访问父作用域,那么创建一个隔离作用域

像这个

.directive('myDirective', function(){
    restrict : 'E',
    scope : {},
    controller: function($scope){
        console.log($scope.username); // Displays user name, same scope!!!
    },
    link: function(scope, element, attrs){
       // Other codes
    },
    templateUrl: "templates/my-template-url.html"
  }
})