2013-02-27 2 views
2

С этого URL-адреса https://github.com/angular/angular-seed/blob/master/app/js/app.js у меня есть контроллер, как показано ниже.Ключевое слово «this» внутри угловых контроллеров js

function WineListCtrl(Wine) { 
    this.wines = Wine.query(); 
} 

До сих пор то, что я делал в угловом режиме, определяет контроллер с впрыском $ scope. Таким образом, я пытался, изменяя выше контроллер

function WineListCtrl(Wine, $scope) { 
    console.log($scope, this) 
    this.wines = Wine.query(); 
} 

Но это дает ошибку об ошибке: Неизвестный поставщик для '$scope'.

У меня есть три вопроса:

  1. Почему $scope контроллера не вводили.
  2. Делает this внутри WineListCtrl означает $scope.
  3. Большинство ошибок в Угловом формате имеют формат «Неизвестный поставщик для XXXX». Что я должен искать, если так говорит Firebug?

ответ

1
  1. Вы используете "выведенные зависимости" (см DI page), который должен работать нормально, если вы не преуменьшать или затуманить ваш JavaScript.

  2. Смотрите my answer на этот вопрос: 'this' vs $scope in AngularJS controllers

  3. ошибки "Неизвестная провайдера обычно возникают, когда вы забыли использовать ng-app где-то, или вы забыли инициализировать приложение с соответствующим модулем:

+0

для пункта 1. Я не запутываю любые файлы. Тем не менее, он бросает ту же ошибку, даже после добавления аннотации для инъекций, ниже контроллера. Как я могу получить доступ к '$ scope'. Посмотрите файлы по адресу http: // plnkr.co/edit/F3WOir8KmEAcqSrX0bRI? p = preview – rajkamal

+0

См. http://plnkr.co/edit/K2Q61Bw0w9PnjRdCtvWY?p=preview. Одна из ваших проблем заключается в том, что вам нужно ввести $ routeProvider, а не $ route. Кроме того, вы не можете вводить $ routeProvider в контроллер. См. Пример на странице [$ route] (http://docs.angularjs.org/api/ng.otherroute). Если вы хотите использовать/вставлять $ resource, вы должны включить другой .js-файл. См. Комментарии Disqus на странице [$ resource page] (http://docs.angularjs.org/api/ngResource.$resource). –

+0

Спасибо, что решил проблему. – rajkamal

1
  1. При написании контроллеров в этой форме вы должны вводить их с зависимостями, как так:

    function WineListCtrl(Wine, $scope) { console.log($scope, this) this.wines = Wine.query(); } WineListCtrl.$inject = ['Wine', '$scope'];

  2. this не то же самое, как $scope. $ Прицел an angular-specific object создан с $rootScope.$new()

  3. см # 1

+0

даже после добавления 'WineListCtrl. $ Injection = ['Wine', '$ scope'];', я получаю ту же ошибку. – rajkamal

+0

Можете ли вы воссоздать проблему в jsfiddle или plunker? – Stewie

+0

URL-адрес плунжера: http: //plnkr.co/edit/F3WOir8KmEAcqSrX0bRI? P = preview. Im сталкивается с некоторыми проблемами при помещении файлов в плункер. Но я приложил все запрошенные файлы. Проблема заключается в том, что metioning находится в контроллере.js, в строке 24. Я включил аннотацию ввода, которую вы попросили включить. – rajkamal