【问题标题】:Angular and Breeze fetchMetaDataAngular 和 Breeze 获取元数据
【发布时间】:2013-08-14 08:56:42
【问题描述】:

我很好奇在使用 Angular 时是否有任何替代方法可以从微风中获取元数据。由于 $q 和 Q Promise 不能相互配合,我决定只使用 Q.js Promise 而不是 $q。在我的控制器中,我正在检查 metaDataStore 是否为空:

  if (mainDataService.manager.metadataStore.isEmpty())
            {
                $log.info('metadataStore is empty') ;

                mainDataService.getMetaData()
                  .then(function ()
                  {
                     EnableCreateButton();
                  });
            }

如果我没有元数据,基本想法是去获取它,然后启用允许我创建新记录的按钮。

为了实现这一点,我在我的数据服务中定义了一个 Q Promise,然后在微风解决承诺后,我解决我的承诺。

  function getMetaData()
{

    var myMetaDataPromise = Q.defer();

    Q.delay(0).then(function () {

        manager.metadataStore.fetchMetadata(serviceName).then(function () {
            myMetaDataPromise.resolve();
        });

    });
    return myMetaDataPromise.promise;



}

任何使这个更清洁的建议都会很棒。我的一个想法是在控制器中定义承诺并让数据服务返回微风承诺。我只是认为这会使控制器混乱,而不是分离出问题。

【问题讨论】:

  • 鉴于“Kris Kowal 的 Q 和 $q 之间的差异”here,您可能需要重新考虑您决定仅使用 Q.js 承诺而不使用 $q。

标签: angularjs breeze promise q


【解决方案1】:

看看新的to$q extension in breeze labs on github,它已经被广泛使用,效果很好。

我们还没有记录它,但是 cmets 解释了如何“安装”和使用它。

您的mainDataService.getMetaData() 可能是:

return manager.metadataStore.fetchMetadata(serviceName).to$q();

然后你按照你的意愿去做:

mainDataService.getMetaData() .then(function() { EnableCreateButton(); });

您现在位于$q 的土地上。 Angular 会自动$apply 你的 EnableCreateButton。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-20
    相关资源
    最近更新 更多