2017-07-18 87 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