从控制器设置/获取服务中的数据

时间:2015-02-12 19:14:40

标签: javascript angularjs angularjs-service angularjs-controller

只是想弄清楚其中一些是如何工作的,所以我想在视图中输入一个数字然后让控制器在服务中设置该数据并切换视图。然后,下一个视图的控制器应从同一服务获取该数字,并最终将其传递给服务器。

在我的控制器中的getter / setter上,我得到了

TypeError: undefined is not a function

但我似乎不明白为什么。我以为我已经按照其他答案的文档和建议,但我必须遗漏一些小的或完全误解一些概念。

我的服务

'use strict';

/* Services 
*/

var equipService = angular.module('getEquipService', []);

equipService.factory('GetEquipment', ['$resource', function($resource) {
    equipService.siteId =1147;

    // these first two I thought I did right but...nope
    this.getId = function() {
            return equipService.siteId;
        }
    this.setId = function(siteId) {
              equipService.siteId = siteId;
        }
    return {

    list:  function(id) {
        return $resource('http://example.com/somelist.cfm', {},{            
          query: {method:'POST', params: {id:id}, isArray:true}
    })}
    }}]);

控制器

var peopleController = angular.module('peopleController', []);

peopleController.controller('LoginController', ['GetEquipment', '$scope', '$log', 
    function(GetEquipment, $scope, $log){
        $scope.buttonText = "Clicked";
        $scope.inputId = "";
        $scope.showPeople = function() {

        // here I thought I could set the number entered
        GetEquipment.setId(this.inputId);
            $log.log("Success!");
            $scope.buttonText = "Get Equipment";                 
    };
}]);

peopleController.controller("PeopleController", ['$scope','$rootScope', '$routeParams', 'GetEquipment', '$log',
function($scope, $rootScope, $routeParams, GetEquipment, $log) {
    $scope.people = GetEquipment.list(1260);

    $log.log("showEuip: ", $scope.people);
    $log.log("getting id: ", GetEquipment.getId());
}]);

下面

GetEquipment.setId(this.inputId);

是我得到上述错误的地方(几个地方之一)。

我的理解是,由于我使用我的服务作为每个控制器的依赖,我应该能够以这种方式访问​​它的功能。不确定我是否错误地定义了函数或其他东西。

我当然想知道为什么我所做的不起作用,但如果有更好的方法来传递输入数据,我愿意倾听。

1 个答案:

答案 0 :(得分:4)

我认为您可能会将factory()service()方法混合在一起。以下是使用以下任一方法实现GetEquipment服务的方法:

使用 module.service()

equipService.service('GetEquipment', ['$resource', function ($resource) {
    equipService.siteId = 1147;

    // these first two I thought I did right but...nope
    this.getId = function () {
        return equipService.siteId;
    };
    this.setId = function (siteId) {
        equipService.siteId = siteId;
    };
    this.list = function (id) {
        return $resource('http://example.com/somelist.cfm', {}, {
            query: {method: 'POST', params: {id: id}, isArray: true}
        })
    };
}]);

使用 module.factory()

equipService.factory('GetEquipment', ['$resource', function ($resource) {
    equipService.siteId = 1147;

    return {
        getId: function () {
            return equipService.siteId;
        },
        setId: function (siteId) {
            equipService.siteId = siteId;
        },
        list: function (id) {
            return $resource('http://example.com/somelist.cfm', {}, {
                query: {method: 'POST', params: {id: id}, isArray: true}
            })
        }
    };
}]);