2014-08-28 96 views
1

我在Angularjs中使用ui路由器時遇到問題。這個場景非常簡單,我有一個用戶列表,當我點擊用戶名時,視圖將跳轉到編輯表單(這也是創建新用戶表單)。Angularjs UI路由器控制器解決後不更新

但問題是,解析編輯狀態後返回的值不會改變。看起來像控制器不更新新狀態。 *(試過$ state.reload我的真實項目,但沒有成功)

這裏是我的參考plnkr:http://plnkr.co/edit/Gv8sQk7ixfni6tzhqjn3

這裏是我的路由配置:

$stateProvider 
    .state('list',{ 
     url:'/', 
     templateUrl:'list.html', 
     controller:'mainCtrl', 
     resolve:{ 
     listUser: function(userService){ 
      return userService.list(); 
     } 
     } 
    }) 
    .state('user',{ 
     url:'/user', 
     templateUrl:'form.html', 
     controller:'userCtrl', 
     resolve:{ 
     objUser: function(userService){ 
      // Init a new "User" object 
      console.log("New user"); 
      return "New name"; 
     } 
     } 
    }) 
    .state('user.edit',{ 
     url:'/:id', 
     templateUrl:'form.html', 
     controller:'userCtrl', 
     resolve:{ 
     objUser: function(userService, $stateParams){ 
      // Return the user 
      console.log("Edit user ", userService.get($stateParams.id)); 
      return userService.get($stateParams.id); 
     } 
     } 
    }); 

之所以我在解決步驟中完成了所有必要的對象,在閱讀了這篇文章Advanced routing and resolves之後,我發現自己處於循環中,我在控制器中完成所有請求,當然,重複代碼是我無法避免的一件事情。所以,我試圖通過改變處理數據的方式來讓它變得更好,但現在陷入困境。

任何人都可以指出我哪裏出錯了嗎?真的很感激它。

+0

會發生什麼事是'user'狀態的決心功能在'user.edit'之後被稱爲*,並覆蓋它。 – 2014-08-28 12:35:38

回答

1

我會說得到一些其它附加信息,即你​​的想法是不壞。如果我們應該遵循它,我會讓user_new和user_edit表示兄弟姐妹。請參閱更新version

.state('user_new',{ 
     url:'/user', 
     templateUrl:'form.html', 
     controller:'userCtrl', 
     resolve:{ 
     objUser: function(userService){ 
      // Init a new "User" object 
      console.log("New user"); 
      return "New name"; 
     } 
     } 
    }) 
.state('user_edit',{ 
     url:'/:id', 
     templateUrl:'form.html', 
     controller:'userCtrl', 
     resolve:{ 
     objUser: function(userService, $stateParams){ 

      // Return the user 
      console.log("Edit user ", userService.get($stateParams.id)); 
      return userService.get($stateParams.id); 
     } 
     } 
    }) 

而且,我們可以編輯user_edit現有和user_new創造新的。其實這兩個國家並不需要是父母 - 孩子,因此解析器可以通過不同的userObj到每個...

檢查它here

+0

感謝您的更新版本, 但實際上你所做的是創建2個不同的狀態(一個用於新建,另一個用於編輯),而不是子對父關係對嗎?我想這就是這樣的方式 – 2014-08-28 13:15:16

+1

這正是我的回答:而不是親子,我創建了兄弟姐妹(兄弟姐妹)。現在我們可以從一個控制器中獲益,但是**兩種不同的解析器** ...不是很棒嗎? ;);) – 2014-08-28 13:21:15

1

會發生什麼情況是用戶狀態的解析函數在user.edit之後調用,並覆蓋它。

好像它在這裏提到一個問題: https://github.com/angular-ui/ui-router/issues/868

你可以在這裏https://github.com/angular-ui/ui-router/issues/78這裏Promise dependency resolution order in angular ui-router

+0

是的,我可以通過檢查console.log來判斷,user.edit中的那個實際上只運行了一次,但最終返回的值被覆蓋。 想知道這行文檔, ''子狀態從父狀態繼承視圖(模板/控制器)和已解決的依賴關係,它們可以覆蓋。「 – 2014-08-28 12:54:21

+0

是的,我認爲這就是爲什麼它打開問題。 – 2014-08-28 13:25:58

相關問題