2017-07-18 86 views
0

我仍然是一个noobie到角dev的,我有一对夫妇提出的解决方案,以我的问题,但不知道如何实现它们。 我正在使用[Angular Bootstrap Toggle]切换我的角度表达式来控制多个参数的开/关值。切换开关状态基于JSON数据

肘节的状态(ON/OFF)是基于NG-模型=“toggleValue”,其中它期望肘值是布尔类型,即真,假。

现在,我从我的数据库(OracleDB的)导入数据有这个参数“toggleValue”定义为“Y”(真)或“N”(假)。如何使拨动开关投诉支持Y/N值?

解决思路:
1)将传入的JSON值从Y转换为true,将N转换为false。
2)将ng-model绑定到表达式,如果值为'Y'则返回true,否则返回false。
3)Hack Angular Bootstrap切换JS脚本。 (最优先)

View Screenshot

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

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

回答

0

所以我发现一对夫妇的解决方案可以针对此问题的工作。再次,我不一定会觉得这是最优的解决方案,因为无论我们需要迭代数据对象并将所需的键值对从“Y”转换为“真”,将“N”转换为假。

1)NG-INIT
我创建过我在那里需要使用这些NG-模型变量划分的父划分,并利用再分配toggleValue的值用下面的代码,以ng-INIT许可证表达式,NG-模型没有

<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-重复和分页,只在S当前页面的cope元素发生更改,从而更有效,并且迭代地更改页面更改中的其他元素。
缺点:我在我的视图中也有一个搜索框,它允许您根据toggleValue参数(true/false)过滤记录。现在,如果应用了过滤器,它将仅过滤掉当前页面元素,而不是所有元素,因为它们仍处于“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; 
    }); 

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

+0

我相信这个解决方案解决了这个问题,但它是一个破解。我暂时接受这个答案,如果我们提出其他解决方案,它将会改变。 – shubhammakharia