不在控制器之间传递我的服务的参数

时间:2015-06-26 00:16:15

标签: angularjs controllers

这是我的服务:

var MyService= function () {
    var filters, charts, subscription;

    return {
        getFilters: function () {
            return this.filters;
        },
        setFilters: function (value) {
            this.filters = value;
        },
        getCharts: function () {
           return this.charts;
        },
        setCharts: function (value) {
           this.charts = value;
        },
        getSubscription: function () {
           return this.subscription;
        },
        setSubscription: function (value) {
           this.subscription = value;
        }
    };
};

angular.module('Something').factory('MyService', MyService);

您可以用于在控制器之间传递参数的典型服务。

控制器A具有在用户选择链接时被调用的功能;该函数在我的服务中设置我的项目,并使用窗口重定向到另一个页面。

$scope.pressedButton = function (subscription) {
   MyService.setSubscription(subscription);
   $window.location.href = 'newPage.html';
}

newPage.html的控制器B应该能够从我的服务中读取和调用my.tem,然后它说它未定义。

console.log(MyService.getSubscription()) == undefined.

任何人都知道为什么?我一直在使用setter和getter但是因为我有点限于我的路由($ window而不是ui-router或ng-router),我觉得转移到一个全新的页面是什么正在清理我的服务..

2 个答案:

答案 0 :(得分:0)

我相信你可能会交换工厂和服务的语法。

myApp.factory('sample', function(){
  var obj = {
    item: ''
  }
  return {
    getItem: function () {
      return obj.item;
    },
    setItem: function (value) {
      obj.item= value;
    }
  }
}

vs a service

myApp.service('sample', function(){
  var _item = '';
  this.getItem = function () {
      return _item;
    };
  this.setItem = function (value) {
      _item = value;
    }
}

答案 1 :(得分:0)

我个人更喜欢$factory数据模型语法,因为它为您提供了伪私有变量和所有这些数据的单一访问点。这样可以更轻松地测试代码,并且不太可能获得格式错误的数据。

另外,如果您要尝试这样的路线,我会推荐使用ui-router。

在您执行set / get的单独服务中,包括$state,然后将该模板文件注入您的视图中。

但语法明智,@ alwang85是正确的。 :1: