Javascript 如何将一个变量从上面两个级别的作用域转换到一个独立的作用域中
我在将特定变量放入我刚刚创建的指令的范围时遇到问题。此变量位于一个更高两级的范围内(即,在我想要访问的范围和我刚刚创建的范围之间有另一个范围)。我的问题是,我不知道中间作用域来自何处,也不知道如何将变量传递到作用域中,除非我想要的变量在父作用域中。我可以这样手动操作:Javascript 如何将一个变量从上面两个级别的作用域转换到一个独立的作用域中,javascript,angularjs,Javascript,Angularjs,我在将特定变量放入我刚刚创建的指令的范围时遇到问题。此变量位于一个更高两级的范围内(即,在我想要访问的范围和我刚刚创建的范围之间有另一个范围)。我的问题是,我不知道中间作用域来自何处,也不知道如何将变量传递到作用域中,除非我想要的变量在父作用域中。我可以这样手动操作: $scope.var = $scope.$parent.$parent.var 但是,如果父范围中的变量为null,则会出现问题。更不用说所有这些额外的JavaScript将是乏味和不必要的。现在,我已经通过使用setInter
$scope.var = $scope.$parent.$parent.var
但是,如果父范围中的变量为null,则会出现问题。更不用说所有这些额外的JavaScript将是乏味和不必要的。现在,我已经通过使用setInterval每5秒检查一次它是否为null来解决这个问题,如果不是,则进行适当的赋值
我将如何着手修复作用域的结构,以便可以简单地使用:
scope: {
var: '='
}
我找到了解决办法。。在我创建的指令上,我需要传入所需的变量。例如:
<my-directive myVar="var"></my-directive>
也许您可以将$scope.var设置为全局变量,因为父对象的作用域是通过其子对象共享的,这意味着您可以在处于父对象的子对象级别时访问父对象的作用域对象。尽管条件是不要将$scope对象的名称与您孩子的$scope对象的名称冲突,因为这将覆盖对象。根据具体需要,您基本上有4个选项: 1) 共享分数(如果是您的指令,您可以设置
scope=false
)-然后您将能够直接从paren't指令访问变量
但是,如果您必须访问上面的两个作用域,并且中间作用域不共享,那么这将不起作用
2) 声明隔离作用域scope={var:'var'}
,并将变量从父作用域显式传递到指令标记属性
3) 根本不使用作用域-您可以将变量作为$broadcast方法的一部分从父作用域发送到子作用域,并将$emit方法从子作用域发送到父作用域
4) 将服务注入父控制器和子控制器,并使用此服务共享变量
scope: {
var: 'myVar'
}