set/get 来自控制器的服务数据

set/get data in service from controllers

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

在控制器的 getters/setters 上,我得到

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);

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

我的理解是,由于我将我的服务用作每个控制器的依赖项,因此我应该能够以这种方式访问​​它的功能。不确定是我定义的函数不正确还是其他原因。

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

我认为您可能混淆了 angular 中的 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}
            })
        }
    };
}]);