Так что если в большом количестве моих контроллеров у меня есть это:
$scope.error = false;
$scope.errorData = {};
$scope.working = false;
$scope.workingMessage = "Doing something, please wait..."; // best UI message ever
Есть ли способ иметь эти постоянно определяется на каждом $scope
данного мои контроллеры?
Так что мне нужно наследование, поэтому, где можно применить эти переменные области видимости к $rootScope
, чтобы он был поднят во всех моих контроллерах?
Update
Таким образом, после долгого чтения документации, представляется, что использование ngApp
авто бутстрэпов углового приложение, которое, когда $injector
работает служба. Мне нужно, чтобы переменные помещались до запуска этой службы, поэтому я предполагаю, что мне нужно вручную загрузить приложение.
Подробнее Работа
.run()
Это работает после того, как все модули были инициализированы. Поэтому здесь я могу ввести $ rootScope и поместить на него свои переменные. Затем они могут использоваться на всех моих $scope
с, очевидно, если вы привязаны к ним данными, вы можете просто использовать имена свойств, потому что связующее сначала будет искать $scope
, а затем все последующие родительские области, пока не найдет свойство.
.run(['$rootScope', rootScopeConfigure]);
function rootScopeConfigure($rootScope) {
$rootScope.myCustomProperty = "Hey There";
}
В соответствии с моим вопросом, это может стать опасным, если вы произвольно добавляете свойства. Но поскольку у меня есть только несколько свойств, это не имеет большого значения или добавляет слишком много накладных расходов. (Я надеюсь).
Однако, все это создает одну проблему, если я хочу изменить это пользовательское свойство в controller
, тогда мне нужно ввести $rootScope
. Я не особенно хочу это сделать, я хочу, чтобы иметь возможность доступа к ним на $scope
В ответ на мой выше пункт, я должен быть в состоянии сделать $scope.$root.myCustomProperty
, потому что я предполагаю, что $rootScope
является корнем из всех $scope
s.
Грязный Ответ
$rootScope.$oldNew = $rootScope.$new;
$rootScope.$new = function() {
var childScope = $rootScope.$oldNew();
childScope.myCustomerProp = "Hey There";
return childScope;
}
ли это в функции run()
. В основном переопределение фабрики, чтобы вернуть новый охват ребенка, на котором есть моя собственность :).
Вы можете поместить переменные, которые будут использоваться во всем приложении, в '$ rootScope', который является родительской областью всех областей. Но имейте в виду, что не рекомендуется загрязнять rootScope ненужными вещами, поскольку он будет использоваться в каждой части приложения, это может вызвать проблемы с производительностью, и это затруднит отслеживание вашего кода. – cubbuk