我有一个由两个子状态(detail.Controller)使用的控制器。
父状态(QUIZ1
& QUIZ3
)具有不同的控制器,可将不同的数据推送到父作用域(quiz1.Controller
& quiz3.Controller
)
routes.js:
{
name: 'QUIZ1',
abstract: true,
url: '/quiz1',
templateUrl: 'app/html-partials/quiz.html',
controller: require('./app/controllers/quiz1.Controller').inject(angular.module('app', ['ui.router', require('angular-sanitize')]))
},
{
name: 'QUIZ1.detail',
url: '/:page',
templateUrl: 'app/html-partials/quiz.detail.html',
params: {
page: {
value: '0',
squash: true
},
score: {
value: '0',
squash: true
},
timer: {
value: false,
squash: true
}
},
controller: require('./app/controllers/detail.Controller').inject(angular.module('app', ['ui.router', require('angular-sanitize')]))
},
{
name: 'QUIZ2',
// some other state stuff
},
{
name: 'QUIZ3',
abstract: true,
url: '/quiz3',
templateUrl: 'app/html-partials/quiz.html',
controller: require('./app/controllers/quiz3.Controller').inject(angular.module('app', ['ui.router', require('angular-sanitize')]))
},
{
name: 'QUIZ3.detail',
url: '/:page',
templateUrl: 'app/html-partials/quiz.detail.html',
params: {
page: {
value: '0',
squash: true
},
score: {
value: '0',
squash: true
},
timer: {
value: false,
squash: true
}
},
controller: require('./app/controllers/detail.Controller').inject(angular.module('app', ['ui.router', require('angular-sanitize')]))
},
quiz1.Controller.js :(构建数据的父控制器)
function buildData(resp) {
$scope.slides = [];
for (var item in resp.quiz_slides) {
if (resp.quiz_slides) {
$scope.slides.push(resp.quiz_slides[item]);
}
}
}
detail.Controller.js :(断点错误的部分):
$scope.slide = $scope.slides[$stateParams.page];
问题:
当我使用QUIZ1.detail
导航出$state.go('QUIZ2')
并最终进入QUIZ3.detail
页面时,我得到:
angular.js:14328 TypeError: Cannot read property '0' of undefined
这与$ stateParams.page(用于导航)有关,我认为它没有正确重置,因为旧数据可能仍在$ scope中。
我知道,因为立即导航到QUIZ3
会解析数据并且没有错误。
有没有人有这方面的经验?
答案 0 :(得分:0)
好的,如果有人想知道我是如何解决这个问题的,那么把它放到这里和那里然后播放给同事,我想:" $ root;用于幻灯片"!
注意: 命名约定与答案略有不同,但您明白了。
我在状态之间引入了一个init状态,这样它就可以正确地解析json的东西并将状态抛出到一个名为.detail的新子节点中: 的 INIT-state.js:强>
{{1}}