通过服务在控制器之间传递数据不会起作用

时间:2017-03-10 14:43:00

标签: javascript angularjs service

我尝试使用服务,工厂或广播在控制器之间传递数据的所有方法。它们都不适合我。我在网上遵循确切的解决方案,但仍然不幸。我把服务放在我的app.js里。

App.JS

myApp.service('customService', [function () {
    this.list = [];

    this.setObject =  function (o) {
        this.list.push(o);
    },
    this.getObject =  function () {
        return this.list;
    }
}]);

控制器#1

myApp.controller('Controller1', function ($scope, customService) {
    customService.setObject({..});
    $window.open("/controller2", '_blank');
}

控制器#2

myApp.controller('Controller2', function ($scope, customService) {
 console.log(customService.getObject()); // Returns []
}

问题

  

它从控制器1返回控制器2上的[],而不是对象数据。

3 个答案:

答案 0 :(得分:0)

您的控制器是否在同一页面上?

  

Angular.js只能在单个页面上保存数据。如果您的页面重新加载   (你似乎在说“express.js加载下一个时”   页面“,然后它重新初始化了一切。

     

你应该:

     

看看如何使用Angular.js路由   (http://docs.angularjs.org/tutorial/step_07)以便留在   同一页。使用某些东西来保存您的数据,例如localstorage。   了解更多信息:http://diveintohtml5.info/storage.html

参考:Using angular service to share data between controllers

答案 1 :(得分:0)

您应修改服务以在某个特定密钥下存储对象,然后在给定该密钥后再检索它。您可以随意定义这些键。我在同一个服务中定义它们,所以我可以通过所有控制器重用它们。像这样的东西

<强>服务

myApp.service('customService', [function () {
    this.keys = {"foo": "foo", "bar": "bar"};
    this.list = {};

    this.setObject =  function (obj, key) {
        this.list[ley] = obj;
    },
    this.getObject =  function (key) {
        return this.list[key];
    }
}]);

控制器#1

myApp.controller('Controller1', function ($scope, customService) {
    customService.setObject({"propX": "propX"}, customService.foo);
    //$window.open("/controller2", '_blank');
    /* I encourage you to use something like ngRoute here for navigating
     * so, you should do something like $location.path('/controller2');
     */
}

控制器#2

myApp.controller('Controller2', function ($scope, customService) {
 console.log(customService.getObject(customService.foo));
}

答案 2 :(得分:0)

你使用过路由吗?如果你使用那么你的代码应该可以工作。