2015-04-03 4 views
10

Не вдаваясь в подробности причин, мне нужно предоставить псевдоним для $scope в моих контроллерах. Вместо того, чтобы вводить и украшать $scope, я бы хотел, чтобы пользователи могли вводить view и иметь тот же эффект.

Основываясь на моем понимании углового, $scope создан $scopeProvider, который является заводом, зарегистрированным во время настройки углового приложения. Я предполагаю, что мне нужно зарегистрировать viewProvider и установить его равным $scopeProvider, но мне не повезло с тем, что я пытался. Есть идеи?

FYI: Я не ищу что-то вроде ['$scope', function(view){..., идеальное решение будет работать с ['view', function(view){.... Объект вида будет действовать точно как $scope, два пути связывания и т.д.

+1

Используя этот псевдоним, вы хотите, чтобы такие же вещи, как двусторонняя привязка, как и $ scope? – Samir

+0

Да. Я хочу получить тот же эффект, что и «var view = $ scope» – Arbiter

+0

Развернуть по причине, по которой вы хотите издеваться над пассивным сервисом. Я могу понять, что насмехается над активным сервисом, подобным http, который выходит за пределы вашей песочницы. Но сервис области - это просто контейнер для того, что вы храните в нем, и его следует использовать таким же образом, как и в производстве. –

ответ

0

Мне удалось решить эту проблему в разделе конфигурации приложения. В моих контроллерах теперь я могу использовать $scope или view, и они будут иметь то же значение.

$routeProvider 
    .when('/Index', { 
     templateUrl: "/views/index.html", 
     controller: ['$scope', '$controller', function($scope, $controller){ 
      $controller("IndexController", {$scope:$scope, view: $scope}); 
     }] 
    }) 
+0

, но, наконец, вы вводите '$ scope' в свой объект' view' –

+0

Я тоже впрыскиваю $ scope, поэтому вы можете использовать «$ scope» или «view» для ссылки на объект области. Это именно то, что я хотел сделать, чтобы в моем реальном определении контроллера использовалось «представление» вместо «$ scope», и иметь в виду то же самое. – Arbiter

+0

, тогда ваш вопрос задает что-то, и вы хотите что-то еще. –

2

Там нет такого понятия, как $scopeProvider, прицелы созданы с использованием методы $new, каждая область видимости имеет доступ к этому методе через наследование (делегирование быть точным). Когда вы запрашиваете $scope в контроллере, $scope создается динамически с использованием его родительского метода $scope$new и вводится под этим именем. Чтобы вызвать вышеупомянутое поведение для другого имени, вам придется играть с угловыми внутренними элементами.

+0

Спасибо, любая идея, как это было бы сделано тогда? – Arbiter

10

Если вы обучаете AngularJS, вы фактически должны избегать использования $scope и использовать controller as syntax - See this awesome Angular Style Guide by John Papa for explanation.

Это также решит вашу проблему :)

+0

Это очень полезно, я прочитаю его. Благодаря! – Arbiter

+0

@Arbiter Добро пожаловать :) Сообщите мне, если вам нужна дополнительная помощь. –

Смежные вопросы