0

我有一個plunker:https://plnkr.co/edit/OlLt9XC6cWYnus20ZEaz?p=previewNG-如果NG-重複調用一個函數

我有一個NG重複,調用一個函數,並得到的.outcome的結果,其中,要麼是真的還是假的。但是,如果這些值未返回,則默認值爲x。

什麼,我想嘗試做的是執行NG-如果在NG-重複值,以便:

if outcome is true, show icon-true. 
if outcome is false, show icon-cross. 
if outcome is x, show icon-blank. 

HTML:

<div ng-repeat="month in months"> 
    {[{getData(contents[item._id].contentHistory,year,month.n)}]} 
    <!-- <i class="icon-cross" ng-if="getData(contents[item._id].contentHistory,year,month.n == false"></i> 
    <i class="icon-true" ng-if="getData(contents[item._id].contentHistory,year,month.n == true"></i> 
    <i class="icon-blank" ng-if="getData(contents[item._id].contentHistory,year,month.n == x"></i> --> 
</div> 
+0

是什麼'x'?它是一個字符串嗎? – mgilson

+0

@mgilson是的,它是... –

+0

你需要用''x''和NOT'x'作爲它不是一個變量,但值來比較看看在plunker控制器。並將圓括號關閉到'getData'call。如果更正,代碼工作正常。你的風格/圖標有些問題,我沒有深入,嘗試使用標籤而不是圖標。工作。 –

回答

1

嘗試。定義一個結果變量並在函數中初始化它。

$scope.outcome = ""; 
    $scope.getData = function(parameters){ 
    if(true) 
     $scope.outcome = 'show icon-true'; 
    if(false) 
     $scope.outcome = 'show icon-cross'; 

    } 



<div ng-repeat="month in months"> 
    <i ng-class="{'show icon-true': outcome == true, 'show icon-cross':outcome == false,}"></i> 
</div> 

我爲你的問題提出了另一種解決方案。

var app = angular.module("app",[]); 
 

 
app.controller("MyCtrl" , function($scope){ 
 
    $scope.items = [ 
 
     {"name":"Ali","class":"a"}, 
 
     {"name":"Reza","class":"b"}, 
 
     {"name":"Majid","class":"c"} 
 
    ]; 
 
    
 
    $scope.getData = function(param){ 
 
    if(param == 'a') 
 
     return 'a'; 
 
    if(param == 'b') 
 
     return 'b'; 
 
    
 
    } 
 
    
 
    
 
    });
.a{ 
 
    color:red; 
 
    } 
 
.b{ 
 
    color:blue; 
 
    }
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<div ng-app="app" ng-controller="MyCtrl"> 
 
    
 
     <div ng-repeat="item in items"> 
 
     
 
     <p ng-class = "getData(item.class)">{{item.name}}</p> 
 
     </div> 
 
    
 
</div>

+0

謝謝,結果來自哪裏?我正在使用{[{getData(contents [item._id] .contentHistory,year,month.n)}]}來獲得我的結果。 –

+0

這看起來並不像正確納克級語法 – shershen

+0

@shershen你是正確的,即不納克級的語法。 –

0

試試這個

<div ng-repeat="month in months"> 
    <i ng-class="{getData(contents[item._id].contentHistory,year,month.n)==true ?'show icon-true': getData(contents[item._id].contentHistory,year,month.n)==false?'show icon-cross':'show icon-blank'}"></i> 
</div> 

我希望這會幫助你。

+0

這完全離開了由運提到的第三個選項,因此該解決方案無緣擺在首位 –

+0

@PatrickKelleter的話題我已經更新了我的答案因此。請立即檢查。 –

+0

這是更好,因爲它適合現在的問題,但它是高性能的少,因爲它有兩次調用該函數。但現在至少它的正確答案,即使它不是最好:) –

3

如果你只需要2的結果 - 真,假 那麼你應該使用ng-hideng-show

使用別的ng-switch

<ANY ng-switch="CALL YOUR EXPRESSION"> 
    <ANY ng-switch-when=true> INSERT TRUE-ICON CODE HERE</ANY> 
    <ANY ng-switch-when=false> INSERT FALSE-ICON CODE HERE</ANY> 
    <ANY ng-switch-default>INSERT DEFAULT-ICON CODE HERE</ANY> 
</ANY 

這種方式,函數被調用一次。

PS:你的邏輯工作正常,(即使你不應該調用getData 3次)。擺脫我在評論中提到的錯誤。我嘗試使用標籤代替圖標,它的工作原理。

+0

你有沒有工作的例子?我似乎無法讓開關工作。 –

+0

不要從角度網站複製和粘貼代碼,因爲它提供了一個高度表明我已經諮詢過角度文檔的深度代碼。 –

+0

對不起,但你的運動員有很多錯誤,這表明你沒有諮詢角度文檔。你需要比較'x''而不是'x',因爲它不是一個變量而是一個值。並關閉圓括號到getData調用。如果更正,代碼工作正常。 Theres錯誤的圖標,我沒有深入,嘗試使用標籤,而不是圖標。工作。 –

0

您可以使用三元運算符通過嵌套它來檢查所有三個條件。

<div ng-repeat="month in months"> 
<i ng-class="{getData(contents[item._id].contentHistory,year,month.n)==true ?'show icon-true': (getData(contents[item._id].contentHistory,year,month.n)==false ? 'show icon-cross' : 'show icon-blank')}"></i>