如何使用过滤器覆盖AngularJS中的文本

时间:2017-06-09 13:51:21

标签: html angularjs

仍在学习Angular然而我需要快速修复某些东西,我无法弄明白。我有一个网站,为您提供USPS运输选项,并需要告诉网站使用我的文本而不是供应商的。该供应商称“2天发货™”,但我想用“标准地面”取代它。

这就是我对过滤器的要求:

app.filter('shipFilter',function() {
return function(string) {
    if (string) {
        return string.replace('2-Day Ship™', 'Standard Ground');    
    }
}

在我的HTML中:

<select class="form-control" ng-change="updateShipper()" name="shipMethod"
        ng-model="currentOrder.LineItems[0].ShipperName"
        ng-show="user.ShipMethod.ShipperSelectionType == 'UserDropDown'"
        ng-options="shipper.Name | shipFilter as (shipper.Name + ' ' + (shipper.ShippingRate.Price | currency | xlat)) for shipper in shippers"
        ng-required="!currentOrder.IsMultipleShip() && user.ShipMethod != null" />
<option value=""></option></select>

这似乎是一个简单的补丁,但是我遇到了墙壁,没有时间。

干杯

2 个答案:

答案 0 :(得分:1)

已经有一段时间,但我想发布我所做的修复。我不得不这样做:

filter.js

//For changing USPS shipping option in dropdown
four51.app.filter('USPSFilter',function() {
debugger;
return function(object) {
    if (object) {
        return object.replace(/USPS Priority Mail 2-Day™/g, 'US Postal Ground');
    }
}
});

将此添加到html以显示下拉列表中的更改:

ng-options="shipper.Name as ((shipper.Name | USPSFilter) + ' ' + (shipper.ShippingRate.Price | currency | xlat)) for shipper in shippers"

将此添加到我的controller.js:

$scope.items = [{name: 'Ground' },{ name: 'Rush' }]

答案 1 :(得分:0)

我在@MatthewGreen的同一页上。您的作用域中有一个数组,因此您只需修改作用域中的数组。但是,如果这绝对不可能,我写了一个正确更改字符串名称的片段。

&#13;
&#13;
strs = [
  "2-Day Ship™",
  "Next Day"
]

var filter = function(string) {
    if (string) {
        return string.replace(/2-Day Ship™/g, 'Standard Ground');    
    }
}

console.log(strs)
strs = strs.map(filter)
console.log(strs)
&#13;
&#13;
&#13;