Не удается добраться до $ rootScope

angularjs

114021 просмотра

3 ответа

Следующий файл «работает» (смысл, что он не выдает никаких ошибок):

<!doctype html>
<html ng-app="modx">
    <script src="http://code.angularjs.org/angular-1.0.0rc7.js"></script> 
    <script>
        angular.module("modx", [], function($routeProvider) {
        });
    </script>
</html>

но это

<!doctype html>
<html ng-app="modx">
    <script src="http://code.angularjs.org/angular-1.0.0rc7.js"></script>
    <script>
        angular.module("modx", [], function($routeProvider, $rootScope) {
        });
    </script>
</html>

выдает ошибку:

Ошибка: неизвестный поставщик: $ rootScope из
исходного файла modx : http://code.angularjs.org/angular-1.0.0rc7.js
Строка: 2491

WTF?

Автор: Malvolio Источник Размещён: 12.09.2019 02:30

Ответы (3)


304 плюса

Решение

Вы не можете спросить, например, на этапе настройки - вы можете спросить только о поставщиках.

var app = angular.module('modx', []);

// configure stuff
app.config(function($routeProvider, $locationProvider) {
  // you can inject any provider here
});

// run blocks
app.run(function($rootScope) {
  // you can inject any instance here
});

См. Http://docs.angularjs.org/guide/module для получения дополнительной информации.

Автор: Vojta Размещён: 07.05.2012 09:50

6 плюса

Я нашел следующий «шаблон» очень полезным:

MainCtrl.$inject = ['$scope', '$rootScope', '$location', 'socket', ...];
function MainCtrl (scope, rootscope, location, thesocket, ...) {

где MainCtrl - контроллер. Мне неловко полагаться на имена параметров функции Controller, которые подражают экземплярам один на один, опасаясь, что я могу изменить имена и все испортить. Я предпочитаю явно использовать $ inject для этой цели.

Автор: Ram Rajamony Размещён: 08.05.2013 08:51

0 плюса

Я не предлагаю вам использовать синтаксис, как вы сделали. AngularJs позволяет иметь различные функциональные возможности, как вы хотите ( run, config, service, factoryи т.д ..), которые более professional.In эта функция вам даже не придется вводить что сами как

MainCtrl.$inject = ['$scope', '$rootScope', '$location', 'socket', ...];

Вы можете использовать это, как вы знаете.

Автор: Hazarapet Tunanyan Размещён: 27.04.2016 09:32
Вопросы из категории :
32x32