首页 > 代码库 > Currency 货币 filter
Currency 货币 filter
angularjs 其实也有一个currency指令,不过好像只是换符号而已。
这里自己写了一个简单的兑换率filter
<div ng-controller="ctrl"> <div>{{ 100 | myCurrency}}</div> <div ng-click="change1(‘SGD‘)">change</div> </div> angular.module("Main", dependentModuleList). controller("ctrl", function ($scope, currencyService) { $scope.change1 = function (code) { currencyService.changeCodeTo(code); }; });
调用大概是这样的 , 100 应该变成 USD 100.00 ,点击事件后就兑换成 SGD xx.xx
angular.module("Currency", []). provider("currencyService", [function () { var that = this; this.defaultCode = "USD"; //允许通过provider修改 this.$get = ["$rootScope", function ($rootScope) { var COOKIE_KEY = "currecyCode"; var SERVICE_PATH = "//service.stooges.com.my/currency.ashx?defaultCode=" + that.defaultCode; //这里可以请求一个当前的 rate table (来自 http://www.xe.com/currencytables) var defaultCode = that.defaultCode; var currentCode = G.s.Cookie.get(COOKIE_KEY) || defaultCode; var rateColletion = {}; //{USD:3.1538542348} var ajaxing = false; function getRateFromServer() { ajaxing = true; G.s.fn.jsonp(SERVICE_PATH).then(function (response) { ajaxing = false; rateColletion = JSON.parse(response).data; $rootScope.$digest(); //手动渲染 }, function () { console.log("get currency rate table fail !"); }); } function getMoneyFormat(money, code) { return code + " " + (parseFloat(money).toFixed(2)); } return { changeCodeTo: function (code) { currentCode = code; //请在外部digest G.s.Cookie.set(COOKIE_KEY, currentCode, new Date().addMonths(1)); }, convertMoney: function (money) { if (defaultCode === currentCode || ajaxing) { //正在向服务器请求的话也直接返回 return getMoneyFormat(money, currentCode); } var rate = rateColletion[currentCode]; if (rate != undefined) { return getMoneyFormat(money / rate, currentCode); //这里是用除法 } else { getRateFromServer(); //第一次得向服务器请求rate表格 return getMoneyFormat(money, currentCode); } } } }] }]). filter("myCurrency", ["$rootScope", "currencyService", function ($rootScope, currencyService) { //手动调用的话要注意, 如果没有rate,会直接返回原value return function (money) { return currencyService.convertMoney(money); } }]);
过程是通过渲染时判断当前货币然后去服务端获取兑换率表格进行兑换。这里用的是一个jsonp请求。
需要判断只请求一次,请求返回时得手动渲染。
Currency 货币 filter
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。