2015-07-20 5 views
0

Я пытаюсь использовать ui-router с lazyload, от chrome Я вижу, что загруженный js загружен, но угловой вызывает ошибку.oc.lazyload не работает с ui-router, js загружен, но контроллер не инициализирован

От ошибки я могу сказать контроллер не инициализирован, приложенный код маршрутизатора:

var app = angular.module('aaaaa', ['oc.lazyLoad', 'ui.router']); 

app.config(function($stateProvider, $urlRouterProvider) { 
    $urlRouterProvider.otherwise('/pages/dashboard'); 

    $stateProvider.state('index', { 
    url: '/pages/:name', 
    templateUrl: function($stateParams) { 
     return 'templates/' + $stateParams.name + '.html'; 
    }, 
    controllerProvider: function($stateParams) { 
     return $stateParams.name; 
    }, 
    resolve: { 
     loader: ['$ocLazyLoad', '$stateParams', function($ocLazyLoad, $stateParams) { 
     var url = 'templates/controllers/' + $stateParams.name + '.js'; 
     console.log(url); 

     return $ocLazyLoad.load({ 
      name: 'aaaaa', 
      files: [url] 
     }); 
     }] 
    } 
    }); 
}); 

я упускаю что-то?

ответ

0

Я бы реорганизовать resolve.loader функцию как таковую:

loader: ['$ocLazyLoad', '$stateParams', function($ocLazyLoad, $stateParams) { 
    var url = 'templates/controllers/' + $stateParams.name + '.js'; 

    return $ocLazyLoad.load(url).then(function() { 
    return $stateParams.name; 
    }); 
}] 

Теперь, когда ocLazyLoad успешно загружен код контроллера, мы возвращаем имя вашего контроллера (я предполагаю, что это настоящее имя совпадает $stateParams.name, так как это относится к нему в контроллереProvider).

А потом в controllerProvider:

controllerProvider: function (loader) { 
    return loader; 
} 

controllerProvider в настоящее время принимают разрешенные значения, а не только stateParams - по следующим фиксации: ui-router#851f8e46.

Это было введено в 0.2.14 и с тех пор changed again, теперь он поддерживает resolved значений в templateUrl функции Aswell.

Так как в сторону, вы могли бы передать loaded в вашу функцию templateUrl в отличие от `$ stateParams.name при обновлении до 0.2.15. Одно значение, чтобы править ими?


Для щеколду это, я бы поставил debugger заявление в верхней части controllerProvider функции заранее, чтобы осмотреть $stateParams.name и убедиться, что он такой же, как и $stateParams.name внутри функции resolve.loader. Для этого.


Кроме того, это может оказаться очень полезно, чтобы увидеть ошибки брошено, Дев вывод на консоль, а также детали реализации вашего контроллера/модуля.

0

Неполаженная проблема.

В отдельном файле контроллера, вы не можете писать это,

app.controller ('xxx', [ ... ]); 

Вместо этого используйте

angular.module('xxxx').controller ('xxx', [ ... ]) 

Я не знаю, почему, но она работала.