Angular $ state.go {reload:true}不应该重新初始化抽象父控制器

时间:2016-05-17 19:46:05

标签: javascript angularjs angular-ui-router

我正在使用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请查看控制台。

2 个答案:

答案 0 :(得分:12)

  1. 将您的ui-router更新为更新版本(至少0.2.14)
  2. $state.go来电更改为$state.go("main.users",{},{reload: "main.users"})
  3. 由于ui-router 0.2.14你可以将字符串作为reload值传递 - ui路由器将刷新与传递的字符串及其所有子节点匹配的状态。

答案 1 :(得分:0)

reload:true选项将重新加载当前状态和父状态(基本上从当前状态到最高级别状态)。但是,如果您使用州名称指定重新加载选项。它只重新加载你输入的状态和它的所有子状态。这直接来自doc