根据 JSON 数据切换开关状态



我仍然是角度开发的菜鸟,我有几个针对我的问题提出的解决方案,但没有意识到如何实现它们。 我在我的角度表达式中使用 [角度引导切换] 开关来控制多个参数的开/关值。

切换(ON/OFF(的状态基于ng-model="toggleValue",它期望切换值是布尔类型,即true,false。

现在,我从数据库(oracledb(导入的数据将这个参数"toggleValue"定义为"Y"(True(或"N"(False(。如何使拨动开关投诉以支持 Y/N 值?

想到的解决方案:
1(将传入的JSON值从Y转换为真,将N转换为假。
2( 将 ng-model 绑定到表达式,如果值为"Y",则计算结果为 true,否则为 false。
3(破解角度引导切换JS脚本。(最不推荐(

查看屏幕截图

小提琴链接:https://jsfiddle.net/3gt64xz8/1/

<toggle ng-model="item.SHIP_FROM_STORE_IND" aria-label="SFS Switch" size="btn-xs"></toggle>

所以我发现有几个解决方案可能适用于这个问题。同样,我不一定认为这些是最佳解决方案,因为无论如何,我们都必须迭代数据对象并将所需键的值转换为:值对从"Y"到真,从"N"到假。

1( ng-init我在需要使用这些 ng-model 变量的分区上创建了一个父分区,并使用以下代码重新分配了 toggleValue 的值,因为ng-init
允许使用表达式,而 ng-model 没有

<div ng-init="item.SHIP_FROM_STORE_IND = init(item.SHIP_FROM_STORE_IND);
item.BOPIS_ENABLED_IND=init(item.BOPIS_ENABLED_IND); 
item.BOSTS_ENABLED_IND=init(item.BOSTS_ENABLED_IND)">

控制器中的初始化函数:

$scope.init = function(value) {
$scope.testInput= (value=='Y')? true:false;
return $scope.testInput;
}

优点:由于我使用的是 ng-repeat 和分页,因此仅更改了当前页面的范围元素,因此效率更高,并且在页面更改时迭代更改了其他元素。
缺点: 我的视图中还有一个搜索框,可让您根据 toggleValue 参数(真/假(过滤记录。现在,如果应用过滤器,它只会过滤掉当前页面元素,而不是所有元素,因为它们仍在"Y"或"N"值中。

2(在获取数据时迭代对象并在控制器中交换值

这是非常简单和明显的解决方案,但显然不是最有效的解决方案。

$scope.items = storeFactory.getRecords().query(
function(response) {
$scope.items=response;
$scope.totalItems = $scope.items.length;
for (var i=0, len=$scope.totalItems; i<len; i++) {
$scope.items[i].toggleValue = ($scope.items[i].SHIP_FROM_STORE_IND=='Y')? true:false;
}
},
function(response) {
$scope.waitMessage = "Error: "+response.status + " " + response.statusText;
});

同样,我们可以在将数据进行任何更改/更新时转换回服务器。

最新更新