2016-10-01 76 views
0

我有一個離子應用程序,用戶可以選擇標籤然後看到帶標籤的內容,當用戶到達應用程序時,我們顯示URL如下state.transitionTo通過false重置狀態變量

http://192.168.43.149:8100/#/explore

當用戶點擊標籤然後我改變URL從上方到下方

http://192.168.43.149:8100/#/explore?tag=ABCD

,我要達到此目的的代碼(沒有重新加載頁)是遵循

 $state.transitionTo($state.current.name, { 
      tag: 'ABCD' 
     }, { 
      notify: false 
     }); 

一切正常,直到這裏,標籤被選中,內容得到過濾和用戶選擇之後看到的標籤在頂部以及一個新的URL(不重新加載),但是如果標記,當我點擊任何圖塊(其中一個已過濾的圖塊)時,在應用更改狀態之前,我看到一個小故障,在更改狀態之前,我發現標記正在被刪除並且內容正在重置,當我從該視圖然後我仍然看到該URL爲http://192.168.43.149:8100/#/explore?tag=ABCD但該標籤上的所有因變量被刪除,並作爲http://192.168.43.149:8100/#/explore

+0

你能不能給我們你的狀態定義你的'app.js'代碼? – nikjohn

+0

@nikjohn這是負責探索狀態.state('browse',{ url:'/ explore?tag', templateUrl:'templates/explore.html' }) –

+0

我已經添加了答案關於如何處理狀態數據。希望有幫助。我對你的狀態特定數據(正在重新設置)更感興趣,而不是你自己的狀態定義本身。 – nikjohn

回答

0

從我所瞭解的情況來看,當你從一個狀態轉移到另一個狀態時,你看起來正在丟失你的狀態信息。這是Angular UiRouter/ngRouter的常見問題,因爲Angular JS本質上是無狀態的。處理這個問題的理想方法是不將狀態數據綁定到控制器或狀態定義。相反,使用應用程序級別的服務來綁定數據。因此,一個例子是:

$routeProvider 
     .when('/users', { 
     templateUrl: '/admin/tpl/users.html', 
     controller: 'UsersController', 
     resolve: { 
      Users: function(Users) { 
      return Users.get(); 
      } 
     }, 
     activetab: 'users' 
     }) 

在這個例子中,你可以看到,無論你如何過渡到/users狀態,即注入路由定義的User服務,每次它獲取用戶數據。

這就是爲什麼你應該使用服務AngularJS要共享狀態的數據

+0

謝謝你提供的答案,但我認爲問題是由離子緩存/歷史被transitionTo調用,因爲如果我刪除它然後一切工作正常操縱。 –

+0

可能。我對伊尼克斯一無所知。但是從角度來看,理想情況下應該使用服務來傳輸狀態數據。不知道這在Ionic中有什麼不同。但很高興看到你的問題得到解決:) – nikjohn

+0

這個問題仍然存在,因爲這是離子狀態改變問題,狀態改變仍然以某種方式影響狀態從它來的地方導致新的緩存視圖,當它不應該。 –