前言
点击ui-sref链接不会刷新命名视图'控制器。
如何点击WeeklyCtrl
点击ui-sref="root.store.page.ad({ adSlug: promo.code })"
上的SidePanelCtrl
注意页面上有重新加载。我看到favicon闪烁,但没有重新启动任何控制器 的 routes.js
$stateProvider
.state('root', {
url: '/',
abstract: true,
views: {
'': {
templateUrl: 'views/main.html',
controller: 'MainCtrl'
}
}
})
.state('root.store', {
url: ':storeSlug',
views: {
'sidepanel': {
templateUrl: 'views/partials/side-panel.html',
controller: 'SidePanelCtrl'
},
'weekly': {
templateUrl: 'views/partials/weekly.html',
controller: 'WeeklyCtrl'
},
}
})
.state('root.store.page', {
url: '/page',
})
.state('root.store.page.ad', {
url: '/:adSlug',
})
的index.html
<div ui-view=""></div>
main.html中
<div ui-view="weekly"></div>
<div ui-view="sidepanel"></div>
侧panel.html
<a ng-repeat="promo in promos" ui-sref="root.store.page.ad({ adSlug: promo.code })" >
<h3>...</h3>
</a>
当WeeklyCtrl
init触发api调用时会触发。
Pages.details.getPages($scope).success(function(data){
console.log(data);
});
最后,当我在促销
之间切换时,我希望再次触发更新
点击链接: API响应3次。控制器多次重启
答案 0 :(得分:4)
我猜这是默认行为。如果您想要实际刷新控制器,请将此功能添加到控制器:
$scope.boom = function(promoCode){
$state.transitionTo("root.store.page.ad",
{ adSlug: promoCode }, { notify: true });
};
并在您看来:
<a ng-repeat="promo in promos"
ng-click="boom(promo.code);$event.preventDefault();" >
<h3>...</h3>
</a>
如果您不喜欢这样,请随时下载ui-sref的源代码并根据该代码创建新指令,称为 ui-sref-ctrl
这就是ui-router的设计方式。
仅在控制器不处于相同状态时才加载控制器。 ui-router不会重新运行控制器,也不会重新评估视图 模板。 即使在多个状态下使用相同的控制器也是如此 在这些之间切换,控制器不会重新运行。
"ui-sref" does not refresh the "ui-view"(its controller does not rerun) when a link is clicked twice