私は、次の工場とコントローラがあります。ファクトリメソッドNavAuthは何アンギュラコントローラ/工場間違った順序で
(function() {
'use strict';
angular.module('app.core')
.factory('Auth', ['$http', function AuthFactory($http) {
return {
NavAuth: function (Tab) {
return $http({ method: 'GET', url: 'Dashboard/AuthorizeNavItem', params: { Name: Tab } });
}
}
}]);
})();
angular
.module('myapp')
.controller('IndexController', ['fuseTheming', 'msNavigationService', 'Auth', function (fuseTheming, msNavigationService, Auth) {
var vm = this;
//Define the tabs
msNavigationService.saveItem('app', {
title: 'QPSTool',
group: true,
weight: 1
});
msNavigationService.saveItem('app.dashboard', {
title: 'Dashboard',
icon: 'icon-tile-four',
state: 'app.dashboard',
weight: 1
});
Auth.NavAuth('IT').success(function (result) {
if (result == 'Authorized') {
msNavigationService.saveItem('app.it', {
title: 'IT',
icon: 'icon-monitor',
weight: 2
});
}
});
Auth.NavAuth('Users').success(function (result) {
if (result == 'Authorized') {
msNavigationService.saveItem('app.it.users', {
title: 'Users',
state: 'app.it.users',
weight: 1
});
}
});
Auth.NavAuth('Admin').success(function (result) {
if (result == 'Authorized') {
msNavigationService.saveItem('app.admin', {
title: 'Admin',
icon: 'icon-radioactive',
weight: 3
});
}
});
Auth.NavAuth('NavControl').success(function (result) {
if (result == 'Authorized') {
msNavigationService.saveItem('app.admin.navcontrol', {
title: 'Navigation Auth',
state: 'app.admin.navcontrol',
weight: 1
});
}
});
// Data
vm.themes = fuseTheming.themes;
}]);
をあるそれがパラメータとしてナビゲーション項目名を取り、ユーザーがあるかどうかを教えてくれるこのアイテムにアクセスできます。
問題は、私がmsNavigationService.saveItem
のデータをランダムな順序で返すことをコントローラで使用していることです。したがってNavControl
の承認をIT
の前に返します。
これにより、サイドナビゲーションが正しく表示されなくなります。
コントローラーで指定した順番で動作するようにするにはどうすればよいですか(つまり、もう一方の操作を行うまで待つにはどうすればよいですか)。
これらはすべて保証されているため、その順序は保証されていません。最善の方法は、結果を配列に保存するロジックを書き直し、すべての約束を処理するために '$ q.all'のような処理をした後、配列を繰り返し処理して、望む順序でレンダリングします。 – Claies
$ q.all()はすべての約束事を一つの約束事にまとめ、すべての約束事が解決されたときに解決されます。 – jbrown
を補足してください。 '.success()'は[deprecated](https://github.com/angular/angular.js/pull/15157)となっており、[1.6で完全に削除されました] (https://github.com/angular/angular.js/commit/b54a39e2029005e0572fbd2ac0e8f6a4e5d69014)。あなたは '.then()'を使うべきですが、この場合は 'call.then(makeAnother()。then(makeAnother())then(makeAnother())))'を使うのはお勧めできません。汚い。 – Claies