Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 在视图之间共享数据_Angularjs_Ionic Framework - Fatal编程技术网

Angularjs 在视图之间共享数据

Angularjs 在视图之间共享数据,angularjs,ionic-framework,Angularjs,Ionic Framework,我正在使用Ionic框架开发应用程序,但有一个问题我无法解决。 我有几个视图是步骤,必须共享数据,用户也可以退后一步,转到其他视图,稍后再回来。他的输入应该存储到最后一步完成,然后我可以持久化模型,我需要一个新的空模型 我使用factory进行此操作,但找不到清除返回的对象的方法。可能吗? 我还可以在这里使用哪些其他方法 app.js .state('topup', { url: "/topup", abstract: true, templateUrl: "templates/topup/to

我正在使用Ionic框架开发应用程序,但有一个问题我无法解决。 我有几个视图是步骤,必须共享数据,用户也可以退后一步,转到其他视图,稍后再回来。他的输入应该存储到最后一步完成,然后我可以持久化模型,我需要一个新的空模型

我使用factory进行此操作,但找不到清除返回的对象的方法。可能吗? 我还可以在这里使用哪些其他方法

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;
})
这样试试

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

这样更改代码,解决了我的问题:

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

我建议您不要在状态级别定义控制器,如果它们具有相同的名称,则在状态更改时重新初始化相同的控制器不是一个好主意

HTML

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

那么我认为您不再需要factory,因为不需要共享作用域。

为什么您在所有状态下都使用同一个控制器似乎已经足够了,还有更多步骤使用上述简单函数,只使用TopUpdatea,那么,有什么理由在多个控制器上拆分它吗?您可以了解为什么不将它包装在
ui-view
parent-div上,然后从状态级别删除控制器谢谢,这是一个很好的建议。我是angular.js的新手,这是我使用Ionic.js的第一步。在状态改变时无缘无故地重新初始化控制器不是一件好事,这帮助我找到了问题所在。它清除了对象,但控制器没有重新加载,并且使用了范围中的旧对象。谢谢,我将尝试重构它,以避免在状态更改时重新初始化控制器。Ionic使用的是ui视图,但我会弄明白的。
.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"
})