Angularjs 角度和角度元数据
我很好奇,在使用Angular时,是否有其他方法可以从breeze获取元数据。由于$q和q承诺彼此不友好,我决定只使用q.js承诺,而不使用$q。在我的控制器中,我正在检查元数据存储是否为空:Angularjs 角度和角度元数据,angularjs,breeze,promise,q,Angularjs,Breeze,Promise,Q,我很好奇,在使用Angular时,是否有其他方法可以从breeze获取元数据。由于$q和q承诺彼此不友好,我决定只使用q.js承诺,而不使用$q。在我的控制器中,我正在检查元数据存储是否为空: if (mainDataService.manager.metadataStore.isEmpty()) { $log.info('metadataStore is empty') ; mainDataServi
if (mainDataService.manager.metadataStore.isEmpty())
{
$log.info('metadataStore is empty') ;
mainDataService.getMetaData()
.then(function ()
{
EnableCreateButton();
});
}
如果我没有元数据,基本的想法是去获取它,然后启用按钮,让我创建一个新的记录
为了实现这一点,我在我的数据服务中定义了一个Q承诺,然后在breeze解决了这个承诺之后,我就解决了我的承诺
function getMetaData()
{
var myMetaDataPromise = Q.defer();
Q.delay(0).then(function () {
manager.metadataStore.fetchMetadata(serviceName).then(function () {
myMetaDataPromise.resolve();
});
});
return myMetaDataPromise.promise;
}
任何让这个更干净的建议都会很好。我的一个想法是在控制器中定义承诺,让数据服务返回微风承诺。我只是觉得这会把控制器弄得乱七八糟,而不会把关注点分开 看一看新的,已经广泛使用并取得了很好的效果
我们还没有对它进行文档记录,但是注释解释了如何“安装”和使用它
然后,您的mainDataService.getMetaData()
可能是:
return manager.metadataStore.fetchMetadata(serviceName).to$q();
将manager.metadataStore.fetchMetadata(serviceName).to$q()返回;
然后你就按照你的意愿去做:
mainDataService.getMetaData()
.then(function() { EnableCreateButton(); });
mainDataService.getMetaData()
.then(函数(){EnableCreateButton();});
你现在在$q
的土地上。Angular将$apply
自动启用您的EnableCreateButton。鉴于“Kris Kowal的Q和$Q之间的差异”,您可能希望重新考虑您只使用Q.js承诺而不使用$Q的决定。