AngularJS指令隔离了范围

时间:2015-04-07 18:24:43

标签: javascript angularjs

我正在学习AngularJS中的指令,我遇到了这段代码:

var app = angular.module('app', []);
//creating custom directive syntax
app.directive("myDir", function () {
return {
        restrict: "E", //define directive type like E = element, A = attribute, C =
        class, M = comment
        scope: { //create a new child scope or an isolate scope
     title: '@' //@ reads the attribute value,
 //= provides two-way bindi

我的问题是:

根据代码,属性“scope”显然用于创建子范围或隔离范围。如果我们想要将该指令的范围隔离,我们如何区分?如果我只想要一个范围孩子而不是孤立我怎么办?

隔离意味着我们创建的隔离范围无法访问父范围中的变量,对吧?

默认情况下,父作用域无法访问子项中的变量,但是如果父项不是孤立的,子项可以访问父变量,是吗?

最后一个问题,如果我们定义一个属性'controller'来为这个指令指定一个控制器,那么这个指令默认具有控制器的范围?

谢谢!

1 个答案:

答案 0 :(得分:1)

设置scope: true以获取未隔离的新子范围。

来自angular-js docs

  

scope

     

如果设置为true ,则会为此指令创建新范围。   如果同一元素上的多个指令仅请求新范围   创建了一个新范围。新范围规则不适用于   模板的根,因为模板的根总是得到一个新的   范围。

     

如果设置为{}(对象哈希),则会创建一个新的“隔离”范围。该   'isolate'范围与正常范围不同,因为它没有   原型继承自父范围。这很有用   创建可重复使用的组件,不应该意外地读取或   修改父范围内的数据。