共享存储在angularjs中的数据

时间:2016-06-03 16:37:26

标签: asp.net angularjs

我试图在控制器之间共享数据。 我调用数据,然后存储在AngularJS Factory变量中。 存储数据时我的目标是让任何控制器都可以访问它。但是在应用程序中,每当我从每个控制器调用存储的数据时,似乎我得到了我的工厂的新实例,而不是我已经包含数据的工厂。

你觉得我在使用工厂时做错了吗?或者有些东西我错过了?

这是

工厂代码:

var Credentials = ['abc'];
function load() {
    var service = HeaderService.get("api/CredentialsAPI/get");
    service.then(function (response) {
        if (response.status == 200)
            Credentials = response.data;
    });
    alert("inside:" + Credentials.length);
}
load();
return {

    SubmitCredentials : function (obj) {
        angular.forEach(obj, function (value) {
            Credentials.push(value);
        });
    },

    GetCredentials : function (name) {
        var datax = {};
        alert(Credentials.length)
        angular.forEach(Credentials, function (value) {
            if (value.Name == name) {
                datax = value;
            }
        });
        return datax;
    }
}

家庭控制器:

loadHome();
function loadHome() {

    $scope.Credentials = CredentialsService.GetCredentials("Task");
}

AssignTask的

$scope.showSubmitView = false;


//----------------------------------function--------------------------------------

$scope.Credentials[] = CredentialsService.GetCredentials("Task");

1 个答案:

答案 0 :(得分:0)

您每次都引用一个新数组。这就是你获得新数据的原因。您应该引用该服务,并让服务处理push()并为您服务。

工厂和服务是单身人士...意思是他们只被实例化一次。共享数据的模式如下:

<强>工厂

app.factory('CredentialService',["$http", function($http) {
    var credentials = [];

    var submitCredentials = function(obj) {
        angular.forEach(obj, function(value) {
            credentials.push(value);
        });
    }

    var getCredentials = function(name) {
        var datax = {};

        if(credentials.length === 0)
            return datax;

        angular.forEach(credentials, function(value) {
            if(value.Name === name) {
                datax = value;
                break; //i think you meant to break; over here
            }
        });

        return datax;
    }

    //return the service;
    return {
        getCredentials: getCredentials,
        submitCredentials: submitCredentials
    };
}]);

<强>控制器

app.controller("Ctrl1", ["$scope", "CredentialService", function($scope, CredentialService) {   
    var credObj = CredentialService.getCredentials('blahblahblah');

    var someNewCredObj = 'blahhhh';
    CredentialService.submitCredentials(someNewCredObj);
}]);