0

我很好奇在使用 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;



}

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

4

1 回答 1

1

看看to$qgithub 上的微风实验室中的新扩展,它已经被广泛使用并取得了很好的效果。

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

mainDataService.getMetaData()可能是:

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

然后你按照你的意图做:

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

你现在在$q. Angular 会$apply自动将您的 EnableCreateButton 设置为。

于 2013-08-13T06:51:53.633 回答