2015-03-03 4 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

Почему вы используете один и тот же контроллер во всех штатах –

+0

Кажется достаточным, есть еще несколько шагов, которые используют простые функции, подобные описанным выше, которые используют только TopupData, поэтому есть ли причины разделить его на нескольких контроллерах? – Adiqq

+0

вы почему-то не просто обертываете его на родительский div 'ui-view' и удаляете контроллер из состояния Уровень –

ответ

1

Попробуйте этот путь.

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

Спасибо, это помогло мне определить проблему. Он очистил объект, но контроллер не был перезагружен и использовал старый объект из области видимости. – Adiqq

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> 

КОД

.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

Смежные вопросы