2016-05-22 12 views
0

Ich versuche, aber manchmal bekomme ichAngularAMD kann nicht meine AngularJS App AngularAMD (a Requirejs Implementierung mit AngularJS) einzurichten lesen Eigenschaft ‚Bootstrap‘ undefinierter

Kann nicht Eigentum ‚Bootstrap‘ undefinierter lesen (...)

main.js

require.config({ 
 

 
paths: { 
 
    //Angular 
 
    'angular': '/bower_components/angular/angular', 
 
    'angular-route': '/bower_components/angular-route/angular-route.min', 
 
    'angularAMD': '/bower_components/angularAMD/angularAMD.min', 
 
    'angular-slick': '/bower_components/angular-slick/dist/slick.min', 
 
    'angular-sanitize': '/bower_components/angular-sanitize/angular-sanitize', 
 

 

 
    //Plugins 
 

 
    'jquery': '/bower_components/jquery/dist/jquery', 
 
    'materialize': '/bower_components/Materialize/dist/js/materialize.min', 
 
    'jquery-hammer': '/bower_components/Materialize/js/jquery.hammer', 
 
    'hammerjs': '/bower_components/Materialize/js/hammer.min', 
 
    'parallax': '/bower_components/parallax.js/parallax.min', 
 
    'slick': '/bower_components/slick-carousel/slick/slick.min', 
 
    'domReady': '/bower_components/requirejs/domReady', 
 

 

 
    //Controllers 
 

 
    'HomeController': 'Components/Home/home.controller', 
 

 

 
}, 
 
shim: { 
 
    angular: { 
 
    exports: "angular", 
 
    }, 
 

 
    'angular-route': ['angular'], 
 
    'angularAMD': ['angular'], 
 

 
    'angular-slick': ['angular', 'slick'], 
 
    'angular-sanitize': ['angular'], 
 
    'materialize': ['jquery', 'jquery-hammer', 'hammerjs'], 
 
    'parallax': ['jquery'], 
 

 
}, 
 
baseUrl: "src", 
 
deps: ['app'] 
 
}); 
 

 

 

 

 

 

 
});

app.js

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

 
    var app = angular.module("app", ['ngRoute', 'ngSanitize', 'slick']); 
 

 
    app.config(function($routeProvider, $locationProvider) { 
 

 
    $routeProvider.when("/", angularAMD.route({ 
 
     templateUrl: 'views/Home/home.html', 
 
     controller: 'HomeController', 
 
     controllerAs: 'vm' 
 
    })); 
 
    $locationProvider.html5Mode(true); 
 
    }); 
 
    return angularAMD.bootstrap(app); 
 

 
});

ich viele differents Möglichkeiten versucht haben, aber keiner von ihnen scheint zu funktionieren, was mache ich falsch? ..

Hinweis: Es passiert nur manchmal, wenn die Seite geladen wird.

+0

Bitte zeigen Sie die 'script' Elemente, die RequireJS laden einen Kick Off Ihrer Anwendung. – Louis

Antwort

-1

Nun, seit meine letzte Frage gelöscht wurde, konnte ich dieses Problem beheben. Erstens: Das ist vielleicht meine Neurose, aber fügen Sie baseUrl vor Ihrem Pfad-Array hinzu.

Zweitens: (In Ihrem app.js) anstelle von

app.config(function($routeProvider, $locationProvider) { 
    $routeProvider.when("/", angularAMD.route({ 
     templateUrl: 'views/Home/home.html', 
     controller: 'HomeController', 
     controllerAs: 'vm' 
    })); 
    $locationProvider.html5Mode(true); 
    }); 
return angularAMD.bootstrap(app); 

tun:

var app = angular.module("app", ['ngRoute', 'ngSanitize', 'slick']); 
app.init = function() { 
    angular.bootstrap(document, ['app']); 
}; 
return app; 

Dies wird es den DOM laden. Wenn Sie mehrere Controller haben, tun Sie das so.

Schließlich stellen Sie sicher, Sie haben nicht ng-app in Ihrem HTML.

+0

Ob "baseUrl" vor oder nach "Pfaden" erscheint, macht keinen Unterschied. Außerdem darf die Konfiguration von RequireJS keine 'shim' für Module enthalten, die' define' aufrufen. Sie haben ein paar da, angularAMD ist das offensichtlichste. (Da angleAMD für AMD entwickelt wurde, muss es 'define' aufrufen, denn das macht ein Modul zu einem * AMD * Modul. Ja, ich weiß, dass die Dokumentation für 'angularAMD' eine' shim' zeigt, 'angleAMD' dagegen nicht diktieren, wie RequireJS funktioniert.) "Deps" brauchen Sie nicht, wenn Sie nach der Konfiguration einen Aufruf von 'require' haben. – Louis