Псевдоним объекта области AngularJS $в контроллере
Не вдаваясь в подробности того, почему, мне нужно предоставить псевдоним для $scope
в моих контроллерах. Вместо того, чтобы вводить и украшать $scope
, я хотел бы, чтобы пользователи вместо этого могли вставлять view
и иметь тот же эффект.
Основываясь на моем понимании angular, $scope
создается $scopeProvider
, который является factory, зарегистрированным во время конфигурации приложения angular. Я предполагаю, что мне нужно зарегистрировать viewProvider
и установить его равным $scopeProvider
, но мне не повезло с тем, что я пытался. Любые идеи?
FYI: Я не ищу что-то вроде ['$scope', function(view){...
, идеальное решение будет работать с ['view', function(view){...
. Объект view будет действовать точно так же, как $scope
, двусторонняя привязка и т.д.
Ответы
Ответ 1
Я смог решить эту проблему в разделе настроек приложения. В моих контроллерах теперь я могу использовать $scope
или view
, и они будут иметь то же значение.
$routeProvider
.when('/Index', {
templateUrl: "/views/index.html",
controller: ['$scope', '$controller', function($scope, $controller){
$controller("IndexController", {$scope:$scope, view: $scope});
}]
})
Ответ 2
Если вы преподаете AngularJS
, вы должны фактически избегать использования $scope
и использовать controller as syntax
- См. этот удивительный Angular Руководство по стилю от John Papa для объяснения.
Это также решит вашу проблему:)
Ответ 3
Нет такой вещи, как $scopeProvider
, области создаются с использованием метода $new
, каждая область доступа имеет доступ к этому методу через наследование (точнее, делегирование). Когда вы запрашиваете $scope
в контроллере, $scope
создается динамически с использованием его родительского метода $scope
$new
и вводится под этим именем. Чтобы вызвать вышеупомянутое поведение для другого имени, вам придется играть с внутренними angular.