我想创建角度指令来更改或格式化绑定的文本值。
我的价值观是这样的:var priceList = [12.90, 15.90, 80, 55.90];
我想使用指令并将priceList
值写为货币格式。
<li ng-repeat"price in priceList">
<span currency>{{price}}</span>
</li>
和指令
angular
.module("app.financal")
.directive("currency", [function () {
return {
restrict: "A",
link: function (scope, element, attribute) {
// if currency vale is not null.
var curr = element.html() + "$";
element.html(curr);
}
}
}]);
如何获取<span currency>{{price}}</span>
元素price
值并更改指令。
答案 0 :(得分:3)
比指令更简单,您可以使用currency
过滤器使用货币格式化数据。它已经存在于Angular中。过滤器用于格式化Angular中的显示数据。
<li ng-repeat"price in priceList">
<span>{{price | currency}}</span>
</li>
有关详细信息,请参阅docs(如果需要,可以添加符号)。
答案 1 :(得分:0)
@ e666的答案将帮助您达到预期的最终结果。如果你想在指令中完成工作,你将不得不直接访问变量的绑定值。
在我们讨论之前,我只想指出代码中有两个障碍,我们应该在继续之前解决。第一个是var priceList = [ 12.90, 15.90, 80, 55.90 ];
目前不在$ scope。我们可以通过将其定义为$scope.priceList = [ 12.90, 15.90, 80, 55.90 ];
来解决此问题。
接下来,您需要确保为ng-repeat分配了一个值。因此,ng-repeat"price in priceList"
应改写为ng-repeat="price in priceList"
的作业。然后,您将可以访问指令中的scope.price
。对于繁琐的小细节感到抱歉,但是为了让价格进入你的指令范围,需要对它们进行处理。
至于目前的指令,element.html()
将返回{{price}}
的值,因此这不是我们想要的。由于scope.price
是绑定数据,我们现在可以直接在指令内修改它以获得所需的结果。
因此,您的HTML会略微修改,如上所述:
<li ng-repeat="price in priceList">
<span currency>{{price}}</span>
</li>
,您的指令将是:
angular
.module("app.financal")
.directive("currency", [function () {
return {
restrict: "A",
link: function (scope, element, attribute) {
// if currency vale is not null.
scope.price = scope.price + "$";
}
}
}]);
请记住,这将返回一个列表,其中“$”附加到字符串的末尾,因此输出将为:
最后,这里有一点(切向)相关阅读: Using Filters With Directives in AngularJS
答案 2 :(得分:0)
您可能希望编写自己的自定义过滤器,所以这里有一些关于如何做到这一点的文献: https://docs.angularjs.org/guide/filter
请考虑以下代码:
.filter('customCurrency', function() {
return function ( input ) {
// if currency value is not null.
var out = input + '$';
return out;
};
})
如果您将html更改为:
,这将执行您上面列出的操作<li ng-repeat="price in priceList">
<span>{{price | customCurrency}}</span>
</li>