【问题标题】:Angularjs's controller dependancy with requirejs?Angularjs控制器依赖于requirejs?
【发布时间】:2015-12-10 09:27:19
【问题描述】:

我正在使用 angular js 和 require 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;
    });

控制器 - signin.js

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

}); 

控制器 - signup.js

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

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

【问题讨论】:

  • 您在哪里需要登录和注册?到目前为止,我看不到您将它们包含在哪里...controller: 'SignIn' 不会触发任何 requirejs 运行...
  • 在 app.js 中定义控制器时。

标签: angularjs requirejs


【解决方案1】:

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

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

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

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

【讨论】:

  • 谢谢迈克尔。我在控制器中定义了模块 define(['signin'], function (signin) { var signIn = angular.module('signin',[]); signIn.controller('ctrlSignIn', function ($scope) { $scope. message = "登录页面"; }); return signIn; });并在 app.js 中像这样定义依赖项 define(['angular','angularRoute','signin','signup'], function (angularRoute,signin,signup) { var app = angular.module('webapp', ['ngRoute','signin','signup']); .
猜你喜欢
  • 1970-01-01
  • 2012-09-06
  • 2014-04-29
  • 2014-10-14
  • 1970-01-01
  • 2011-11-18
  • 2015-04-02
  • 1970-01-01
  • 2017-06-01
相关资源
最近更新 更多