2つの子状態(detail.Controller)で使用される1つのコントローラがあります。角度UIルータ - 子状態でコントローラを共有するときに親に対して状態パラメータがリセットされる
{
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:
親状態(QUIZ1
& QUIZ3
)は、親スコープ(quiz1.Controller
& quiz3.Controller
)
routes.jsに異なるデータをプッシュ異なるコントローラを持っています。 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:(ブレークポイントがerroringされる部分):
$scope.slide = $scope.slides[$stateParams.page];
問題:
私は最終的に$state.go('QUIZ2')
とでQUIZ1.detail
から移動するとページの先頭に戻るQUIZ3.detail
angular.js:14328 TypeError: Cannot read property '0' of undefined
これは$ stateParams.page(ナビゲーションに使用される)に関連しています。以前のデータが$ scopeに残っている可能性があるため、正しくリセットされていないと思います。
私が知っているのは、QUIZ3
に即座にナビゲートするとデータが解析され、エラーは発生しないためです。
誰もこれについて何か経験がありましたか?
あなたはあなたが「結局QUIZ2.detailに移動すると、あなたはQUIZ1.detailからQUIZ2.detailに直接行っていませんか?中間的な状態はありますか、あるいはあなたは親を通して行きますか?恐らく、子供たちは両親のパラメルを継承しますが、それ以外の方法では継承しないからです。 – rrd
@rrd、それは正しいです。まずQUIZ2を通過してからQUIZ3に入っていなければなりません - これを反映するように質問を更新しました! 'QUIZ1' stateParamsにどうやって掛かっているのですか? –