Angularjs Can';t从包含ng的控制器访问$parent
我是Angular的新手,我正在尝试构建一个应用程序 我使用Angularjs Can';t从包含ng的控制器访问$parent,angularjs,angularjs-scope,angularjs-ng-include,Angularjs,Angularjs Scope,Angularjs Ng Include,我是Angular的新手,我正在尝试构建一个应用程序 我使用ng include插入视图,具体取决于主控制器的currentURL变量。 当我试图从ng包含的文件中通过$parent访问主控制器时,我得到的只是未定义的 我的目标是更改currentURL变量以更新视图 这是我的密码: index.html <body ng-controller="mainCtrl as main"> currentURL : {{main.currentURL}} <div n
ng include
插入视图,具体取决于主控制器的currentURL
变量。
当我试图从ng包含的文件中通过$parent
访问主控制器时,我得到的只是未定义的
我的目标是更改currentURL
变量以更新视图
这是我的密码:
index.html
<body ng-controller="mainCtrl as main">
currentURL : {{main.currentURL}}
<div ng-include="main.currentURL"></div>
<script src="/vendors/angular.min.js"></script>
<script src="/modules/login.js"></script>
<script src="app.js"></script>
</body>
<div ng-controller="loginCtrl as login">
<h1>LOGIN</h1>
</div>
查看/login.html
<body ng-controller="mainCtrl as main">
currentURL : {{main.currentURL}}
<div ng-include="main.currentURL"></div>
<script src="/vendors/angular.min.js"></script>
<script src="/modules/login.js"></script>
<script src="app.js"></script>
</body>
<div ng-controller="loginCtrl as login">
<h1>LOGIN</h1>
</div>
当您想要访问
loginCtrl
控制器中的mainCtrl
时,您需要使用$parent
访问父控制器范围
但问题是您正在使用ng include
加载loginCtrl
控制器视图,因此您的控制器被加载到mainCtrl
的子范围中,因为ng include
从当前范围创建子范围
因此,您需要使用$parent.$parent
从loginCtrl
代码
function loginCtrl($scope) {
var vm = this;
console.log($scope.$parent.$parent); // this would contain mainCtrl
}
更好的方法是在定义对象时使用controllerAs语法或遵循点规则,以便遵循原型继承。您需要使用
$scope.$parent
,这将使您能够访问parentscope@pankajparkar我认为这个
和$scope
是一回事。我会尽快尝试这个。让我知道它是否有效?它与$scope.$parent.$parent.main.currentURL
一起工作!我不知道为什么我必须以这种方式访问它,因为您使用了ng include
,您倾向于使用$parent.$parent
,这是正确的。额外的$parent是因为ng include
创建了子范围。.很高兴听到这对ypu有帮助。.谢谢:)