Angularjs的控制器依赖于requirejs?

时间:2015-12-10 09:27:20

标签: angularjs requirejs

我使用带有需要js的角度js来制作单个页面模板。 一切正常,接受一件事。当我尝试在$ routeProvider中定义控制器名称时,它显示错误:

错误:[ng:areq] http://errors.angularjs.org/1.4.8/ng/areq?p0=SignIn&p1=not%20aNaNunction%2C%20got%20undefined

我将这些文件分开:

rootfolder
    js
      -require.js
      -angular.min.js
      -angular-route.js
      -main.js
      -app.js
      -signin.js
      -signup.js

    index.php
    sign_in.php
    sign_up.php

我的代码:

Main.js

 require.config({
        baseUrl: "./js",
        paths: {
            'angular': 'angular.min',
            'angularRoute': 'angular-route'
        },
        shim: { 
            'angular' : { exports : 'angular' },
            'angularRoute' : { deps : ['angular'] }
        },
        deps: ['app']
    });

App.js

  define(['angular','angularRoute'], function (angularRoute) {
        var app = angular.module('webapp', ['ngRoute']);
        app.config(['$routeProvider',
                            function($routeProvider) {
                                $routeProvider.
                                  when('/signin', {
                                    templateUrl: 'sign_in.php',
                                    controller: 'SignIn'
                                  }).
                                  when('/signup', {
                                    templateUrl: 'sign_up.php',
                                    controller: 'SignUp'
                                  }).
                                  otherwise({
                                    redirectTo: '/signin'
                                  });
                              }
          ]);
        return app;
    });

controller - signin.js

define(['app'], function (app) {
    app.controller('SignIn', function ($scope) {
        $scope.message = "Sign in page"; 
    });

}); 

controller - signup.js

define(['app'], function (app) {
    app.controller('SignUp', function ($scope) {
        $scope.message = "Sign up page"; 
    }); 
}); 

当我在$ routeProvider中定义控制器:'SignIn'或控制器:'SignUp'时,它会显示错误,否则它会正常工作。

1 个答案:

答案 0 :(得分:0)

您还需要将requirejs包括signin.jssignup.js。您在App.js中的代码不会触发任何requirejs调用来加载这两个文件。

when('/signin', {
    templateUrl: 'sign_in.php',
    controller: 'SignIn'
})

只会告诉AngularJS在导航到/ signin后尝试实例化名为'SignIn'的控制器。但是,这将 not 导致加载signin.js文件。

确保您的最外面的模块也依赖于signinsignup