2017-01-04 6 views
0

Когда я пытаюсь загрузить контроллер динамически, у меня следующее сообщение об ошибке: sideCtrl & p1 = не% 20aNaNunction% 2C% 20got% 20undefinedrequirejs angularjs контроллер не определен

но page1, код работает хорошо. Вот мой код:

main.js:

require.config({ 
    paths: { 
     jquery: ['//ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min', 'lib/jquery/jquery_2.0.0.min.js'], 
     angular: ['//ajax.googleapis.com/ajax/libs/angularjs/1.2.16/angular.min', 'lib/angular/angular_1.2.16.min'], 
     angularRoute: ['//ajax.googleapis.com/ajax/libs/angularjs/1.2.16/angular-route.min', 'lib/angular-route/angular-route_1.2.16.min'] 
    }, 
    shim: { 
     'angular' : {'exports' : 'angular'}, 
     'angularRoute': ['angular'] 
    }, 
    deps: ['app'] 
}); 

config.js:

define([],function(){ 
    function config($routeProvider) { 
    $routeProvider 
     .when('/page1', { 
     templateUrl: 'templates/page1.html', 
     controller: 'mainCtrl' 
     }) 
     .when('/page2', { 
     templateUrl: 'templates/page2.html',   
     resolve: { 
      load: function($q, $route, $rootScope) { 

       var deferred = $q.defer(); 

       var dependencies = [ 
        'sideCtrl.js' 
       ]; 

       require(dependencies, function() { 
        $rootScope.$apply(function() { 
        deferred.resolve(); 
        }); 
       }); 
       return deferred.promise; 
      } 
     } 
     }) 
     .otherwise({redirectTo: '/page1'}); 
    } 
    config.$inject=['$routeProvider']; 

    return config; 
}); 

app.js

/*global require*/ 
'use strict'; 

define([ 
    'angular','angularRoute', 'mainCtrl', 'config' 
    ], function (angular, angularRoute,mainCtrl,config) { 
     var app = angular.module('app', ['ngRoute']); 
     app.config(config); 
     app.controller('mainCtrl', mainCtrl); 


     angular.bootstrap(document, ['app']);  
     return app; 
}); 

sideCtrl.js:

"use strict"; 
define(['app'], function (app) { 

    app.controller('sideCtrl', ['$scope', 
     function ($scope) { 
      console.log("hello world"); 
      $scope.names="krish"; 
      console.log("sideCtrl calling"); 
     } 
    ]); 
    console.log(app); 
    return app; 
}); 

page2.html

<div ng-controller="sideCtrl"> 
asdasdas 
    {{names}} 

</div> 

ответ

0

добавив контроллер динамически требует, чтобы зарегистрировать его с помощью текущего активного поставщика, поэтому вы не можете зарегистрировать его с помощью регулярного «app.controller», что вам нужно сделать, это зарегистрировать его через $ controllerProvider.register

с наилучшими пожеланиями

+0

Если я могу это сделать, это ошибка: $ controllerProvider не определен – krish

+0

вам нужно вводить его в первую очередь? Я делаю это в моей конфигурации 'app.provider ('resolver', ['$ controllerProvider', '$ compileProvider', '$ filterProvider', '$ обеспечивать', function ($ controllerProvider, $ compileProvider, $ filterProvider, $ обеспечивать) { angular.register = { контроллер: $ controllerProvider.register, директива: $ compileProvider.directive, фильтр: $ filterProvider.register, фабрика: $ provide.factory, обслуживание: $ provide.service, constant: $ reserve.constant };}]) ' – johnjerrico

+0

в порядке, используя app.controllerProvider вместо $ controllerProvider работал для меня. Большое спасибо. – krish

 Смежные вопросы

  • Нет связанных вопросов^_^