ビューとセットアップコントローラーをロードするステートプロバイダーがあります。現在、コントローラーは、更新されたオブジェクトを提供するサービスに依存しています。たとえば、状態-s、テンプレートv、およびコントローラーcがあります。c はサービス s に依存します。s には、AJAX からデータをフェッチする「sm」というメソッドがあります。ここで、「sm」は、状態が読み込まれたときにのみ呼び出され、コントローラーがインスタンス化される前に呼び出されるようにします。
私はそれが解決でできることを知っていますが、コントローラーがインスタンス化される前にサービスメソッドのロードを注文する方法。
特定の順序でスクリプトをロードする oclazylaod ベースの関数「loadSequence」を使用しています。
元。
.state('member.course', {
url: "/course",
templateUrl: "assets/views/course.html",
controller: 'coursecontroller',
resolve: loadSequence('someservice', 'coursecontroller', 'toaster', 'ngImgCrop'),
data: {
css: 'assets/css/course.css'
}
})
「courseController」がロードされる前に、someservice.getData メソッドを呼び出す必要があります。どうやってするの?
Edit-loadSequence;:-
function loadSequence() {
var _args = arguments;
return {
deps: ['$ocLazyLoad', '$q',
function($ocLL, $q) {
var promise = $q.when(1);
for (var i = 0, len = _args.length; i < len; i++) {
promise = promiseThen(_args[i]);
}
return promise;
function promiseThen(_arg) {
if (typeof _arg == 'function')
return promise.then(_arg);
else
return promise.then(function() {
var nowLoad = requiredData(_arg);
if (!nowLoad)
return $.error('Route resolve: Bad resource name [' + _arg + ']');
return $ocLL.load(nowLoad);
});
}
function requiredData(name) {
if (jsRequires.modules)
for (var m in jsRequires.modules)
if (jsRequires.modules[m].name && jsRequires.modules[m].name === name)
return jsRequires.modules[m];
return jsRequires.scripts && jsRequires.scripts[name];
}
}
]
};
}