2014-09-19 102 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