如何将变量从上述两个级别的范围转换为孤立的范围

时间:2019-02-18 21:54:48

标签: javascript angularjs

我无法将特定变量放入我刚刚创建的指令的范围内。此变量的作用域高两个级别(即,我要访问的范围和我刚刚创建的范围之间还有另一个范围)。我的问题是,我不知道中间作用域的来源,也不知道如何将变量传递到作用域中,除非我想要的变量在父作用域中。我可以这样手动进行:

$scope.var = $scope.$parent.$parent.var

但是,如果父级父级作用域中的变量为null,则会出现问题。更不用说所有这些额外的JavaScript将是乏味且不必要的。现在,我已经通过使用setInterval每5秒检查一次它是否为null来解决这个问题,如果不是,请进行适当的分配。

我该如何解决范围结构的问题,以便我可以简单地使用:

scope: {
   var: '='
}

3 个答案:

答案 0 :(得分:1)

根据特定需求,您基本上有4个选择:

1)共享分数(如果是您的指令,则可以设置scope=false)-这样您就可以直接从paren't指令访问变量。

但是如果您必须访问上述2个作用域并且中间作用域未共享,则此操作将无效。

2)声明隔离范围scope = { var: 'var' },并将变量从父范围显式传递给指令标记属性。

3)完全不使用作用域-您可以将变量作为$ broadcast方法的一部分从父级发送到子级,并作为$ emit方法的一部分从子级发送到父级。

4)向父级和子级控制器注入服务,并使用此服务共享变量。

答案 1 :(得分:0)

我找到了一个解决方案。在我创建的指令上,我需要传入所需的变量。例如:

<my-directive myVar="var"></my-directive>

在JavaScrpit中:

scope: {
   var: 'myVar'
}

答案 2 :(得分:0)

也许您可以将$ scope.var设置为全局变量,因为父级的范围是通过其子级共享的,这意味着您可以在其子级时访问父级的范围对象。尽管条件是不要使$ scope对象的名称与孩子的$ scope对象的名称冲突,因为这会覆盖该对象。