从第三级范围角度js访问第二级范围

时间:2017-06-19 02:34:08

标签: javascript angularjs

enter image description here

如上图所示,我试图从角度控制器的3级范围访问第二级2范围 但是,父来自null,它能够访问Level1范围,虽然我不想要

还需要从level3访问level2范围

  

如下图所示,来自父母的2级范围来自   空

enter image description here

1 个答案:

答案 0 :(得分:0)

angular.element(...).scope()将获得目标元素所属的范围(非当前范围)。

在下面的示例中,我添加了四个输入(外部控制器,levelOne,levelTwo,levelThree)以使其清除(打开控制台以确认它)。

angular.module("app", [])
  .controller("levelOne", function($scope) {
    $scope.data = 'levelOne';
  })
  .controller("levelTwo", function($scope) {
    $scope.childData = 'levelTwo';
  })
  .controller("levelThree", function($scope) {
    $scope.grandChildData = 'levelThree';
    console.log($scope.$parent);
    var scope = angular.element(document.getElementById("input")).scope();
    var parentScope = angular.element(document.getElementById("levelOne")).scope();
    var childScope = angular.element(document.getElementById("levelTwo")).scope();
    var grandChildScope = angular.element(document.getElementById("levelThree")).scope();
    console.log('scope', scope);
    console.log('parentScope', parentScope);
    console.log('childScope', childScope);
    console.log('grandChildScope', grandChildScope);
  });
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.4/angular.min.js"></script>
<div ng-app="app">
  <input id="input" type="text" value="not in controller">
  <hr>
  <div ng-controller="levelOne">
    <input id="levelOne" type="text" ng-model="data">
    <hr>
    <div ng-controller="levelTwo">
      <input id="levelTwo" type="text" ng-model="childData">
      <hr>
      <div ng-controller="levelThree">
        <input id="levelThree" type="text" ng-model="grandChildData">
      </div>
    </div>
  </div>
</div>

并根据您提供的屏幕截图,也许您适合第二种情况(元素属于 level1 的模板),然后解决方案应该是将元素移动到 level3 的模板。