#angularjs
#angularjs ( ангулярджс ) #angularjs
Вопрос:
В следующем коде:
var myApp = angular.module('myApp', []);
myApp.controller('UserCtrl', ['$scope', function ($scope) {
// Let's namespace the user details
// Also great for DOM visual aids too
$scope.user = {};
$scope.user.details = {
"username": "Todd Motto",
"id": "89101112"
};
}]);
У меня есть объект-член, определенный пользователем ($scope.user). Однако это определяется внутри контроллера. Можно ли создать это как глобальный объект, чтобы другие контроллеры в моем приложении имели доступ к тому же объекту?
Комментарии:
1. Вы также можете использовать концепцию factory.
Ответ №1:
Вы можете определить службу, которая является общей для всех контроллеров:
app.factory('userService', function() {
return {
user: {
details: {
username: 'Todd Motto',
id: 89101112
}
}
};
});
Затем внедрите сервис в свой контроллер:
app.controller('ctrl', function($scope, userService) {
$scope.user = userService.user;
});
Комментарии:
1. здесь вы используете factory. ‘$scope’ также может быть введен в параметр функции на заводе. ваш способ тоже правильный. @AndroidDev, это статический способ. чтобы сделать его динамичным, вы должны ввести область видимости…
2. На самом деле $ rootScope может, но не область действия контроллера. Служба ничего не знает о контроллерах.
3. Создает ли $scope.user = UserService.user ссылку на пользователя или копию? Если я обновлю $scope.user в этом контроллере, будет ли он автоматически обновлен во всех других контроллерах, где используется UserService.user?
4. Да, это ссылка — это один и тот же экземпляр.
Ответ №2:
Используйте $rootScope, это сделает его глобальным, поскольку существует только один.
Вот ссылка, чтобы прочитать больше:https://docs.angularjs.org/api/ng/service /$rootScope
Не забудьте внедрить его в свой контроллер перед его использованием.
Надеюсь, это поможет.