我想创建一个过滤器,将货币转换为另一种货币,例如日元到美元,我希望它简单如下:
{{ myMoneyInYen | usd }}
我的问题是,我从API获取用于转换的值,但我似乎无法使其工作。它只是空白。如果我能做到的话,那将是非常好的。你们认为我应该把它变成一个指令呢?
module.filter('svcData', ['promisedSvc', function(promisedSvc) {
return function(input) {
promisedSvc.then(function(svc) {
var valuesUsedForConversion = svc.getData(input);
//DO actual conversion here.
return convertedValue;
});
};
}]);
答案 0 :(得分:0)
在解析您的承诺时,您应该将结果数据设置为范围可访问变量,然后过滤此变量。
答案 1 :(得分:0)
您可以使用有状态过滤器:
angular.module("app").filter('svcData', function($http) {
var cached = {};
var apiUrl = 'http://my.service.com';
function svcDataFilter(data_id, data_prop) {
if (data_id) {
if (data_id in cached) {
// avoid returning a promise!
return typeof cached[data_id].then !== 'function' ?
cached[data_id][data_prop] : undefined;
} else {
cached[data_id] = $http({
method: 'GET',
url: apiUrl + data_id
}).success(function (data) {
cached[data_id] = data;
});
}
}
}
svcDataFilterFilter.$stateful = true;
return svcDataFilterFilter;
})
并像这样使用它:{{data_id |svcData:'property'}}
注意:将在每个摘要周期上调用函数svcDataFilter。
此外,如果缓存增长过大,您需要找到一种方法来重置缓存。
请参阅:https://glebbahmutov.com/blog/async-angular-filter/
并且上面的链接(上面的链接不会显示它,所以这里是直接链接):http://plnkr.co/edit/EK2TYI1NZevojOFDpaOG?p=preview