2015-03-03 114 views
1

我正在開發使用Ionic Framework的應用程序,並且存在我無法解決的問題。 我有幾個視圖是步驟,必須共享數據,用戶也可以退後一步,轉到其他視圖並稍後再回來。他的輸入應該存儲,直到最後一步完成,然後我可以堅持模型,我需要新的空的。在視圖之間共享數據

我用這個工廠,但我找不到方法來清除返回的對象。可能嗎? 我可以在這裏使用的其他方法是什麼?

app.js

.state('topup', { 
url: "/topup", 
abstract: true, 
templateUrl: "templates/topup/topup.html", 
controller:'TopupCtrl' 
}) 

.state('topup-1', { 
url: "/topup-1", 
templateUrl: "templates/topup/topup-1.html", 
controller:'TopupCtrl' 
}) 

.state('topup-2', { 
url: "/topup-2", 
templateUrl: "templates/topup/topup-2.html", 
controller:'TopupCtrl' 
}) 

controllers.js

.controller('TopupCtrl', function($scope, $state, TopupData, HistoryData) { 
$scope.data = TopupData.getCurrent(); 
$scope.selectOperator = function(operator) { 
    $scope.data.Operator = operator; 
    $state.go("topup-2"); 
}; 
$scope.acceptTopup = function(){ 
    HistoryData.getHistory().push($scope.data); 
    console.log(HistoryData.getHistory()); 
    TopupData.setCurrent({}); 
    $state.go("main"); 
}; 
}) 

services.js

.factory('TopupData', function() { 
var service = {}; 
var Model = {}; 
service.setCurrent = function(value) 
{ 
Model = value; 
}; 
service.getCurrent = function(value) 
{ 
return Model; 
}; 

return service; 
}) 
+0

爲什麼你在所有狀態下使用相同的控制器 – 2015-03-03 09:13:36

+0

似乎足夠了,有更多的步驟使用上面這些只使用TopupData的簡單函數,那麼是否有任何理由將其拆分到多個控制器上? – Adiqq 2015-03-03 09:28:15

+0

你爲什麼不把它包裝在'ui-view'父div並從狀態中刪除控制器級別 – 2015-03-03 09:29:33

回答

1

嘗試這種方式。

console.log(HistoryData.getHistory()); 
var resetObj = {}; 
TopupData.setCurrent(resetObj); 
$state.go("main"); 
+0

謝謝,這幫助我指出了問題。它清除了該對象,但控制器沒有重新加載並使用範圍內的舊對象。 – Adiqq 2015-03-03 09:21:52

0

改變這樣的代碼,解決我的問題:

var resetObj = {}; 
    TopupData.setCurrent(resetObj); 
    $state.go("main").then(function(){ 
     $ionicHistory.clearHistory(); 
     $ionicHistory.clearCache(); 
    }); 
1

我建議你不要定義在州一級的控制,如果他們是同一個名字的,重新初始化相同控制器狀態改變不是個好主意。

HTML

<div ng-controller="TopupCtrl"> 
    <ui-view></ui-view> 
</div> 

CODE

.state('topup', { 
    url: "/topup", 
    abstract: true, 
    templateUrl: "templates/topup/topup.html" 
}) 

.state('topup-1', { 
    url: "/topup-1", 
    templateUrl: "templates/topup/topup-1.html" 
}) 

.state('topup-2', { 
    url: "/topup-2", 
    templateUrl: "templates/topup/topup-2.html" 
}) 

那麼我不這麼認爲,你需要再廠,因爲沒有必要共享範圍。

+0

謝謝,我會嘗試重構它,以不重新初始化狀態變化的控制器。 Ionic使用http://ionicframework.com/docs/api/directive/ionView/而不是ui-view,但我會解決它。 – Adiqq 2015-03-03 09:54:18