我会尝试提供一个示例伪代码,以便尽可能详细地解释我的问题。我不能在这里放一个有效的代码,因为那里涉及太多的图层,指令和模板。
我的基本结构是:
...
<div>
<div ui-view>
<div ui-view></div>
</div>
</div>
...
当父ui-view
内的代码执行$state.go
更新子ui-view
时,父母也会再次加载。
我们假设父州名为contact
,孩子名为details
。我的$state.go
来电是$state.go("contact.details")
,$stateProvider
配置如下:
$stateProvider.state({ name: "contact" /*, rest of properties */ });
$stateProvider.state({ name: "contact.details", /*, rest of properties */ });
此外,整个孩子ui-view
发生在指令翻译中。让我们说它会是:
<div>
<div ui-view>
<directive>
<content>
<div ui-view></div>
</content>
</directive>
</div>
</div>
有了这些细节,您会发现任何问题吗?为什么$state.go("contact.details")
也重新加载contact
? (请注意,contact.details
已加载,但重新加载contact
会产生副作用,因为控制器会再次执行...)。
如果我在$state.go("details")
的控制器上拨打contact
,则会出现同样的问题,但一旦加载,当我$state.go
到其他子状态时,每个子状态按预期打开,但再次调用父状态控制器。
答案 0 :(得分:0)
我没有问题,但我与你有所不同,我的父状态要么是抽象的,要么重定向到他控制器中的默认子项。
所以我会
$stateProvider.state({ name: "contact" /*, rest of properties */
controller:['$state', function($state){
if($state.current.name=='contact'){
$state.go('contact.main');
}
}]
});
$stateProvider.state({ name: "contact.main", /*, rest of properties */
$stateProvider.state({ name: "contact.details", /*, rest of properties */ });
答案 1 :(得分:0)
最后,我想出了如何解决我的问题/场景。
我已使用点语法作为第一个参数切换到注册子状态。例如Cloud.Messages.create({
to_ids: to.join(','),
body: 'New Message',
subject: 'Test Message',
custom_fields:
{
"[ACS_File]file_id":videoFile,
"[ACS_User]owner_id":to.join(','),
"pausedAt" : pausedAt,
"correctAnswer": correctAnswer,
"a2" : a2,
"a3" : a3
}
}, function (e) {
if (e.success) {
var message = e.messages[0];
alert('Success:\n' +
'id: ' + message.id + '\n' +
'subject: ' + message.subject + '\n' +
'body: ' + message.body + '\n' +
'updated_at: ' + message.updated_at);
//Her gikk alt bra og melding og video er lastet opp. På tide å sende en push :-)
} else {
alert('Error:\n' +
((e.error && e.message) || JSON.stringify(e)));
}
});
}
而不是$stateProvider.state("a.b", {})
。我知道我的问题是我使用$stateProvider.state({ name: "b", parent: "a" });
注册州。自从我发布此Q&amp; A。
我现在在子状态name: "a.b"
中调用$state.go("a.b")
来打开默认子状态(这是问题的根源)。请参阅Angular JS ui-router how to redirect to a child state from a parent?和