Angularjs Can';t从包含ng的控制器访问$parent

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

我是Angular的新手,我正在尝试构建一个应用程序

我使用
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有帮助。.谢谢:)