为了保持我的$ rootScope干净,我需要一个包含我的应用程序中的控制器之间共享的数据的对象。根据定义,服务是在Angular应用程序中执行此操作的方式。
话虽如此,服务是否需要定义一个方法才能工作,或者它是否只需返回一个具有可由控制器操作的属性列表的对象?
此外,如果服务返回的对象只是数据,那么将其合并到范围中的最佳方法是什么。以下是我的服务定义:
angular.module('dataService', [])
.service('gameData', function() {
this.loggedIn = "false";
this.gameJoined = "false";
this.tableFull = "false";
this.username = "";
this.tableInfo = {};
this.gameNum = null;
this.atTable = "";
this.numJoined = 0;
this.userNames = [];
this.numPlayers = _.range(2,7);
this.numOfRuns = _.range(1,11);
});
当我使用此方法将服务注入控制器时:
client.controller('loginController', ['$scope','gameData', function
($rootScope, $scope, gameData) {
$scope.gameData = gameData;
console.log('gameData: ');
console.log(gameData.loggedIn);
}]);
gameData.loggedIn in在运行时未定义。
非常感谢任何澄清!
ž
答案 0 :(得分:2)
不,服务中的方法不是强制性的。您的代码无法正常工作的原因是因为您搞乱了控制器中的依赖项。
变化:
['$scope','gameData', function
($rootScope, $scope, gameData)
到
['$rootScope', '$scope','gameData', function
($rootScope, $scope, gameData)
答案 1 :(得分:2)
服务不必定义方法,但如果您只是想要一个对象,那么请考虑使用value(name, value)
或constant(name, value)
来定义一个只返回值的服务。
这两者之间的区别在于可以将常量注入模块配置函数(值不能),并且值可以被装饰器覆盖(常量不能),但是对于一个简单的对象来共享数据要么做好这份工作。
angular.module('dataService', [])
.value('gameData', {
loggedIn: false,
gameJoined: false,
tableFull: false,
username: "",
tableInfo: {},
gameNum: null,
atTable: "",
numJoined: 0,
userNames: [],
numPlayers: _.range(2,7),
numOfRuns: _.range(1,11)
});
client.controller('loginController', function($rootScope, $scope, gameData) {
$scope.gameData = gameData;
console.log('gameData: ');
console.log(gameData.loggedIn);
});