我正在使用ui-route进行导航
我有一个名为 main 的父亲状态,它是一个RewriteEngine on
# RewriteRule for GOOGLE ROOT URL
RewriteCond %{HTTP_USER_AGENT} Googlebot
RewriteCond %{HTTP_HOST} upfrontbeats\.com [NC]
RewriteCond %{REQUEST_URI} ^/$
RewriteRule ^(.*)$ /snapshots/index.html [L]
# RewriteRule for GOOGLE ROOT ALL OTHER URLS
RewriteCond %{HTTP_USER_AGENT} Googlebot
RewriteCond %{QUERY_STRING} ^_escaped_fragment_=/?(.*)$
RewriteRule ^(.*)$ /snapshots/%1? [NC,L]
# RewriteRule for FACEBOOK
RewriteCond %{HTTP_USER_AGENT} facebookexternalhit/1.1 [NC,OR]
RewriteCond %{QUERY_STRING} _escaped_fragment_=(.*)$
RewriteRule ^(.*)$ /snapshots/$1? [NC,L]
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^(.*) /index.php [NC,L]
州(网址: / main )和子状态产品和用户(网址: / main / products 和 / main / users )。
abstract
在这里我的控制器:
app.config(["$stateProvider", "$urlRouterProvider",
function($stateProvider, $urlRouterProvider) {
$urlRouterProvider.otherwise("/main/products");
$stateProvider
.state("main", {
url:"/main",
templateUrl: "main.html",
abstract: true,
controller: "MainCtrl",
})
.state("main.products", {
templateUrl: "products.html",
controller: "productsCtrl",
})
.state("main.users", {
templateUrl: "users.html",
controller: "usersCtrl",
})
}
]);
HTML:
app.controller('MainCtrl', function($scope,$state) {
console.log("I'm Main controller")
$scope.goToProduct = function()
{
//$state.go("main.products",{})
$state.go("main.products",{},{reload:true})
}
$scope.goToUsers = function()
{
//$state.go("main.users",{})
$state.go("main.users",{},{reload:true})
}
});
app.controller('usersCtrl', function() {
console.log("I'm users controller")
});
app.controller('productsCtrl', function() {
console.log("I'm products controller")
});
如您所见,我正在使用: 的 $ state.go( “main.products”,{},{重载:真}) 用于导航
当我点击菜单上的用户/产品时<ul>
<li style="cursor:pointer" ng-click="goToProduct()">Click for products</li>
<li style="cursor:pointer" ng-click="goToUsers()">Click for users</li>
</ul>
<br>
<div style="font-size:28px" ui-view></div>
重新初始化 !!
这是因为MainCtrl
。
我的问题:
1)为什么“父亲”状态控制器也会在每次点击时重新初始化?
2)我需要优雅解决方案避免 {reload:true}
重新初始化!
以下是完整示例 - plunker请查看控制台。
答案 0 :(得分:12)
$state.go
来电更改为$state.go("main.users",{},{reload: "main.users"})
由于ui-router 0.2.14你可以将字符串作为reload
值传递 - ui路由器将刷新与传递的字符串及其所有子节点匹配的状态。
答案 1 :(得分:0)
reload:true选项将重新加载当前状态和父状态(基本上从当前状态到最高级别状态)。但是,如果您使用州名称指定重新加载选项。它只重新加载你输入的状态和它的所有子状态。这直接来自doc