2014-09-19 105 views
0

我對AngularJS和JavaScript中的承諾都很陌生。 我有一個.config,它使用提供程序在我正在處理的應用程序中創建菜單。

該供應商擁有一個enabled屬性,在這個enabled屬性我要檢查,如果用戶是一個組織的管理員。只有當用戶是管理員時才能顯示此菜單項。

一些代碼:

PageMenuProvider 
    .page('organization', 'dashboard', { 
     state: 'organization.dashboard', 
     label: 'SW.ORGANIZATION.DASHBOARD.LABEL', 
     weight: -60, 
     enabled: ['$stateParams', '$rootScope', 'Organization', function ($stateParams, $rootScope, Organization) { 
     return Organization.get({ slug: $stateParams.slug }).$promise 
      .then(function (organization) { 
      return organization.user_role === 'management' || $rootScope.isAdmin 
      }) 
     }] 
    }) 

的問題是,我得到一個$承諾作爲回報價值,而不是期望的布爾值。

回答

0

歡迎的承諾和異步編程的世界!

是 - 你將有一個承諾返回,因爲你的第一個return語句是Organization.get

然而,當這一承諾解決你會得到你所期望的布爾。

我的第二個猜測你一點 - 但如果你嘗試,直到一個承諾已經完成,你應該看看在控制器的決心功能加載阻止頁面。

http://odetocode.com/blogs/scott/archive/2014/05/20/using-resolve-in-angularjs-routes.aspx

+0

問題是,您無法訪問提供程序中的$ scope。我當然不希望在$ rootScope上執行此操作。 – Timon 2014-09-22 08:23:11

+0

您可能希望將isAdmin存儲在某個用戶實體的某個概念上,而不是$ rootScope。讓這個工作起作用的關鍵是'enabled'被處理。正如我所說的那樣,方法會返回一個承諾 - 在他們的內部,您需要解決和處理響應。 – eddiec 2014-09-22 13:00:44