Angularjs 基于JSON数据的切换开关状态

Angularjs 基于JSON数据的切换开关状态,angularjs,json,angular-bootstrap-toggle,Angularjs,Json,Angular Bootstrap Toggle,我仍然是angular dev的不速之客,我对我的问题提出了一些解决方案,但没有意识到如何实现它们。 我在角度表达式中使用[Angular Bootstrap Toggle]开关来控制多个参数的开/关值 切换(开/关)的状态基于ng model=“toggleValue”,其中它期望切换值为布尔类型,即true、false 现在,我从数据库(oracledb)导入的数据将此参数“toggleValue”定义为“Y”(True)或“N”(False)。如何投诉拨动开关以支持Y/N值 思考的解决方案

我仍然是angular dev的不速之客,我对我的问题提出了一些解决方案,但没有意识到如何实现它们。 我在角度表达式中使用[Angular Bootstrap Toggle]开关来控制多个参数的开/关值

切换(开/关)的状态基于ng model=“toggleValue”,其中它期望切换值为布尔类型,即true、false

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

思考的解决方案:
1) 将传入的JSON值从Y转换为true,从N转换为false。
2) 将ng模型绑定到表达式,如果值为“Y”,则该表达式的计算结果为true,否则为false。
3) Hack Angular Bootstrap切换JS脚本。(最不可取)

小提琴链接:


因此我发现有两种解决方案可以解决这个问题。同样,我不一定认为这些是最佳的解决方案,因为无论如何,我们都必须迭代数据对象,并将所需key:value对的值从“Y”转换为true,从“N”转换为false

1)ng初始化
我在需要使用这些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)">
优点:由于我使用的是ng重复和分页,所以只有当前页面的范围元素会被更改,因此效率更高,其他元素会在页面更改时反复更改
缺点:我的视图中还有一个搜索框,可以根据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;
    });
$scope.items=storeFactory.getRecords().query(
功能(响应){
$scope.items=响应;
$scope.totalItems=$scope.items.length;

对于(var i=0,len=$scope.totalItems;我相信这个解决方案解决了问题,但这是一个黑客行为。我暂时接受这个答案,如果我们提出其他解决方案,我会改变。
$scope.init = function(value) {
$scope.testInput= (value=='Y')? true:false;
return $scope.testInput;
}
$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;
    });