Стремясь сохранить мой $ rootScope чистым, мне нужен объект, который содержит данные, которые распределяются между контроллерами в моем приложении. Как определено, сервисы - это способ сделать это в приложении с угловым выражением.
С учетом сказанного, требует ли служба для определения метода для работы или может ли он просто вернуть объект со списком свойств, которыми могут управлять контроллеры?
Кроме того, если объект, возвращаемый службой, является просто данными, что является лучшим способом включить его в область. Ниже приведено определение моего сервиса:
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 не определено, когда это выполняется.
Любые разъяснения будут очень признательны!
Z
Служба не должна определять метод, но если вы просто хотите, чтобы объект рассматривал использование 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);
});
Нет, методы не являются обязательными в обслуживании. Причина, по которой вы работаете, не работает, потому что вы перепутали зависимость в контроллере.
Изменить:
['$scope','gameData', function
($rootScope, $scope, gameData)
в
['$rootScope', '$scope','gameData', function
($rootScope, $scope, gameData)
gulp
с gulp-ng-annotate
или аналогичным набором инструментов. Тогда исходный код может просто использовать простые функции со всеми аннотациями, добавляемыми автоматически.
ng-strict-di
: docs.angularjs.org/error/$injector/strictdi
.value('gameData', { ... })
.