Javascript 无作用域指令-如何获取数据?

Javascript 无作用域指令-如何获取数据?,javascript,angularjs,Javascript,Angularjs,我使用的是无作用域指令 在外部方向1中,我有controllerAS:'vm'和var vm=this;vm.test=从it中的directive1进行测试 内部directive2的作用域为false,controllerAs:'vm2',bindToController:true 如何从directive2获取directive1 vm.test数据?我想在控制器中使用它,而不是在HTML视图中使用它 var vm = this 是指令1的JS范围而不是angular的$scope对象的

我使用的是无作用域指令

在外部方向1中,我有controllerAS:'vm'和var vm=this;vm.test=从it中的directive1进行测试

内部directive2的作用域为false,controllerAs:'vm2',bindToController:true
如何从directive2获取directive1 vm.test数据?我想在控制器中使用它,而不是在HTML视图中使用它

var vm = this
是指令1的JS范围而不是angular的$scope对象的局部变量。Directive2将永远无法访问它。要提供访问权限,您必须将vm附加到指令1的作用域。然后嵌套指令2的$scope就可以访问它

就像指令一中的一样

$scope.vm = this; // This will work
$scope.vm.test = 'test from directive1 scope';
就像第二指令中的一样

controller: function ($scope) {
  console.log($scope.vm.test) // this will work for you
下面是一个正在工作的JSFIDLE示例


这并不意味着它是无作用域的,它只是使用父作用域。您可以通过scope.vm本身获得它我的意思是我不想使用$scope。阅读此问题与您的设计有关。。。为什么您的指令对父控制器有隐藏的依赖关系,如果是这样,那么只需在指令中使用require即可。有关如何确定指令范围的信息,请参见本节。由于设计问题,尝试使用您的特定案例访问它是一个X/Y问题,我相信.OP使用的是controllerAs语法,因此vm/vm2别名不是一些局部变量,它已经是作用域上的一个属性。但是我根本不想使用$scope:阅读本文,也许您可以使用我提供的JSFIDLE测试您的理论?我无法在directive2中调用$scope.vm或scope.vm并获取值。在一个工作的JSFIDLE示例中,您有什么建议?啊,我看到了您的示例,感谢您发布它以进行澄清。
controller: function ($scope) {
  console.log($scope.vm.test) // this will work for you