찾다

 >  Q&A  >  본문

angular.js - angular require 加载controller问题

main.js中定义好配置项

requirejs.config({
    paths: {
        jQuery: '../lib/jquery.min',
        angular: '../lib/angular.min',
        angularRouter: '../lib/angular-route.min',
        angularAnimate: '../lib/angular-animate.min',
        ngNotify: '../lib/angular-atomic-notify',
        api: '../js/common/api',
        utils: '../js/common/utils'
    },
    shim: {
        'angular': {
            deps: ['jQuery'],
            exports: 'angular'
        },
        angularRouter: {
            deps: ['angular'],
            exports: 'ngRoute'
        },
        angularAnimate: {
            deps: ['angular']
        },
        ngNotify: {
            deps: ['angular']
        },
        api: {
            deps: ['angular']
        },
        utils: {
            deps: ['angular']
        }
    }
});

// 手动开启angular服务
require(['angular', 'app'], function(angular){
    angular.element(document).ready(function(){
        angular.bootstrap(document, ['yceMain']);
    });

});

app中定义模块与路由

app.js

define(['angular', 'angularRouter', 'ngNotify', 'angularAnimate', 'api', 'utils'], function(angular){

    var yceMain = angular.module('yceMain',['ngRoute', 'atomic-notify', 'ngAnimate']);


    yceMain.config(['$routeProvider', '$controllerProvider', function ($routeProvider, $controllerProvider){

        $routeProvider
            .when('/dashBoard', {
                templateUrl: 'views/dashBoard.html'

            })

            .when('/appManage', {
                templateUrl: 'views/appManage.html',
                controller: 'appManage'
            })
    }]);




    return yceMain;

});

appManage controller.js代码如下

define(['app'], function (yceMain){

    yceMain.controller('appManage', ['$scope' , function ($scope){

        $scope.aa = 11;
    }]);


});

页面报错

 Error: [ng:areq] http://errors.angularjs.org/1.5.0/ng/areq?p0=appManage&p1=not%20aNaNunction%2C%20got%20undefined
 

若在app.js中定义appManage controller,则视图中可以拿到数据,但如果在appManage controller.js 使用define(['app'],xx) 获取angular.module则取不到,求解。

漂亮男人漂亮男人2744일 전989

모든 응답(2)나는 대답할 것이다

  • 我想大声告诉你

    我想大声告诉你2017-05-15 17:10:36

    으아악

    이 앱은 삽입되어서는 안 됩니다. console.log(yceMain)를 사용하세요.
    appManage 컨트롤러를 앱 모듈에 바인딩하려면 다음과 같이 작성할 수 있어야 합니다.

    으아악

    물론, 이 컨트롤러도 페이지에 소개되어야 합니다

    UI-Router + OCLAZYLOAD를 사용했어요

    회신하다
    0
  • 某草草

    某草草2017-05-15 17:10:36

    문제는 각도가 ng-app 서비스를 시작하기 전에 모든 컨트롤러와 서비스를 등록해야 한다는 것입니다.
    하지만 내 생각은 require를 통해 컨트롤러를 비동기적으로 로드하는 것입니다.

    으아악

    이 기능은 문제를 완벽하게 해결합니다. /a/11… 감사합니다.

    회신하다
    0
  • 취소회신하다