如上图所示,我试图从角度控制器的3级范围访问第二级2范围 但是,父来自null,它能够访问Level1范围,虽然我不想要
还需要从level3访问level2范围
如下图所示,来自父母的2级范围来自 空
答案 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 的模板。