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

che*_*zer 5 javascript angularjs angular-ui-router

我正在使用ui-route进行导航.
我有一个名为main的父状态,它是一个abstract状态(url:/ main)和子状态产品用户(urls:/ main/products/ main/users).

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",
      })
  }
]);
Run Code Online (Sandbox Code Playgroud)

在这里我的控制器:

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")
});
Run Code Online (Sandbox Code Playgroud)

HTML:

<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>
Run Code Online (Sandbox Code Playgroud)

如您所见,我正在使用: $ state.go("main.products",{},{reload:true}) 用于导航

当我点击菜单上的用户/产品时,MainCtrl 重新初始化 !!
这是因为{reload:true}.

我的问题:
1)为什么"父亲"状态控制器也会在每次点击时重新初始化?
2)我需要一个优雅的解决方案,避免MainCtrl重新初始化!

这是完整的例子 - plunker 请看控制台.

Art*_*ski 12

  1. 将您的ui-router更新到更新版本(至少0.2.14)
  2. $state.go呼叫改为这样的事情$state.go("main.users",{},{reload: "main.users"})

由于ui-router 0.2.14你可以传递字符串作为reload值 - ui路由器将刷新与传递的字符串及其所有子节点匹配的状态.