Почему я не могу найти 'angular' в модуле с angularAMD?

0

Я работаю с AngularAMD, и я пытаюсь "загрузить" угловой модуль.

Вот моя архитектура:

--js
----app.js
----main.js
--lib
----angular.easypiechart.js
----ngload.js

В моем main.js у меня есть этот код:

require.config({
    baseUrl: "js",
    paths: {
        'angular': 'https://ajax.googleapis.com/ajax/libs/angularjs/1.4.5/angular',
        'angular-route': 'https://ajax.googleapis.com/ajax/libs/angularjs/1.4.5/angular-route',
        'angularAMD': 'https://cdn.jsdelivr.net/angular.amd/0.2/angularAMD.min',
        'ngload': '../lib/ngload',
        'easypiechart': '../lib/angular.easypiechart'
    },
    shim: {
        'angularAMD': ['angular'],
        'angular-route': ['angular'],
        'ngload': ['angularAMD'],
        'easypiechart': ['angular']
    },
    deps: ['app']
});

И в моем app.js:

define(['angularAMD', 'angular-route', 'easypiechart'], function (angularAMD) {
    'use strict';

    var app = angular.module('guess-bg', ['ngRoute']);
    // config, etc.

    return angularAMD.bootstrap(app);
});

Но 'easypiechart' терпит неудачу, и я получаю ошибку. Cannot read property 'module' of undefined

Я не понимаю, потому что использовал "угловой" в прокладке для easypiechart.

Я пробовал много вещей, таких как

define(['angularAMD', 'angular-route', 'ngload!easypiechart']

Или

var app = angular.module('guess-bg', ['ngRoute', 'easypiechart']);

Но продолжайте получать ошибки. Это очень мрачно для меня, и я даже не понимаю, как работает этот "ngload". angular-route прочим, у меня не было проблем с angular-route.

Во всяком случае, я не знаю, как просто загрузить этот модуль, и это действительно раздражает...

Не могли бы вы рассказать мне, что мне не хватает?

  • 0
    Не могли бы вы сказать, откуда именно этот 'Cannot read property 'module' of undefined' ? Это из вашего app.js или из angular.easypiechart.js ?
Теги:
angular-amd

1 ответ

0
Лучший ответ

Я даже не понимаю, как работает этот "ngload"

Вам не нужно ngload если вы хотите загрузить модуль непосредственно в свой первый модуль requireJS. В основном это используется для ленивого модуля загрузки для вашего приложения, например, в /some/random/route/ вы хотите использовать угловой модуль, но только хотите, чтобы он был загружен здесь. ngload сделает трюк.

Но "easypiechart" терпит неудачу, и я получаю ошибку. Не могу прочитать модуль "свойства" неопределенного

В app.js попытайтесь удалить 'use strict'; :

define(['angularAMD', 'angular-route', 'easypiechart'], function (angularAMD) {

    var app = angular.module('guess-bg', ['ngRoute', 'easypiechart']);
    // config, etc.

    return angularAMD.bootstrap(app);
});

Это может быть вызвано тем, что вы включите strict режим. Таким образом, браузер обнаружил, что angular объект не определен нигде в app.js поэтому вы получили ошибку Cannot read property 'module' of undefined.

Другими словами, angular объект определяется и доступен глобально. Но поскольку вы находитесь в строгом режиме, браузер отказывается использовать такую глобальную переменную. Если вы все еще хотите использовать строгий режим. window.angular этого используйте window.angular:

define(['angularAMD', 'angular-route', 'easypiechart'], function (angularAMD) {
    'use strict';

    var app = window.angular.module('guess-bg', ['ngRoute', 'easypiechart']);
    // config, etc.

    return angularAMD.bootstrap(app);
});

Ещё вопросы

Сообщество Overcoder
Наверх
Меню