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