我无法将特定变量放入我刚刚创建的指令的范围内。此变量的作用域高两个级别(即,我要访问的范围和我刚刚创建的范围之间还有另一个范围)。我的问题是,我不知道中间作用域的来源,也不知道如何将变量传递到作用域中,除非我想要的变量在父作用域中。我可以这样手动进行:
$scope.var = $scope.$parent.$parent.var
但是,如果父级父级作用域中的变量为null,则会出现问题。更不用说所有这些额外的JavaScript将是乏味且不必要的。现在,我已经通过使用setInterval每5秒检查一次它是否为null来解决这个问题,如果不是,请进行适当的分配。
我该如何解决范围结构的问题,以便我可以简单地使用:
scope: {
var: '='
}
答案 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对象的名称冲突,因为这会覆盖该对象。