【发布时间】:2019-01-16 15:33:27
【问题描述】:
我正在尝试创建一个父子控制器结构,其中包含父控制器中所有子控制器所需的通用功能。当我尝试从不相关的状态更改为其中一个子状态时,仅运行父控制器。
我尝试过使用抽象控制器、声明孩子和父母的所有不同形式(使用点表示法、使用 parent = 'parentControllerName'),但似乎没有任何效果。
代码中某处的随机控制器
changeToLoginEmail() => {
$state.go('login.email');
}
当我调用 changeToLoginEmail 时,它会通过我的 routes.js 进行路由
angular.module('myModule')
.config(['$stateProvider', function ($stateProvider) {
$stateProvider
.state('login', { // Parent Controller
abstract: true,
url: '/login',
views: {
"master": {
controller: 'loginController'
}
}
})
.state('login.email', { // One of the children
url: '/login/email',
views: {
"email": {
controller: 'loginEmailController',
templateUrl: '/components/loginEmail/loginEmailView.html'
}
}
})
}
]);
这是两个控制器:
登录控制器:
(() => {
'use strict';
angular
.module('myModule')
.controller('loginController', loginController);
function loginController($scope, $state) {
console.log("state", $state);
console.log("scope", $scope);
}
loginController.$inject = ['$scope', '$state'];
})()
登录电子邮件控制器:
(() => {
'use strict';
angular
.module('myModule')
.controller('loginEmailController', loginEmailController);
function loginEmailController($scope, $state) {
console.log("I was loaded woopie");
}
loginEmailController.$inject = ['$scope', '$state'];
})()
我希望先加载父控制器,然后再加载子控制器。但是,控制台中只打印了前两个 console.log,而 loginEmailController 的 console.log 永远不会运行。结果是没有加载任何视图。
有人知道为什么吗?
【问题讨论】:
-
你确定你在孩子中需要
/login/email作为'url',而不仅仅是/email? -
目前我还不确定。但两种变体都不起作用。看来这确实是不必要的,所以谢谢你 :) 问题仍然存在。
-
按照弗兰克的建议 - 尝试将
url: '/login/email',更改为url: '/email', -
如果您访问 /login/login/email 这个链接到浏览器,您将看到日志是按顺序打印的。
-
感谢您发现网址错误,已修复,不会造成任何问题。尽管如此,子控制器仍然没有运行
标签: javascript angularjs angular-ui-router frontend