2014-02-06 78 views
1

我使用:有沒有一種方法可以清理我按鈕上的ng類定義?

<button data-ng-repeat="question in test.testquestions" 
      data-ng-class="{current: question.number == test.currentQuestion, correct: question.result == 't', incorrect: qh.result == 'f', shown: qh.result == 's', tagged: qh.tag == true}" 
      data-ng-click="getDetail(qh.i, q.questionId)" 
      data-ng-disabled="q.qs.i == qh.i"> 

代碼的作品,但類定義很長,所以我不能很容易地看到它在我的編輯窗口。 有沒有什麼方法可以在多行上傳播,甚至可以在我的控制器中進行定義?

+1

我做了這個哈克的方式。我在模板中定義了

+0

我沒有嘗試包裝。那麼你是否說我可以將報價打開並繼續下一行? – Alan2

+1

是的,就像那樣 – doodeec

回答

1

只是包裝上新的生產線的納克級的表達,這是完全正常的做

2

你當然可以從你的控制器得到它,但結果是不同的,基於ng-repeat中的測試,所以你需要從函數中獲得它。你想避免每次都返回一個不同的對象,所以你需要以某種方式緩存它。這裏是一個使用test.currentQuestion的例子,假設它是一個簡單的值類型(如int)。

var classes = {}; 

$scope.getClasses = function(question) { 
    if(!classes[question.number]) { 
    classes[question.number] = {}; 
    } 

    var result = classes[question.number]; 
    result.current = question.number === $scope.test.currentQuestion; 
    result.correct = question.result === 't'; 
    result.incorrect = question.result === 'f'; 
    result.shown = question.result === 's'; 
    result.tagged = question.tag === true; 

    return result; 
}; 

然後,您可以從您的視圖調用它:

data-ng-class="getClasses(test)" 
+0

只要在testquestions數組中有100個問題,函數getClasses將在每個摘要循環中被調用100次,並且應用程序將會很慢...這樣使用它不是一個好習慣 – doodeec

+0

@ doodeec我不確定我明白爲什麼這是一個問題。只要有100個問題,那麼現有的字符串表達式也將在每個摘要循環中評估100次。無論是調用函數,還是純粹的表達式評估看起來都不相關。換句話說,我不同意。我在Angular中做了大量的perf工作,並且在表達式中調用函數從來都不是我的經驗中的瓶頸..綁定/表達式的原始數量是重要的,並且此解決方案不會增加綁定/表達計數。 –

+0

我的想法是 - 如果你用ng-class包裝函數,函數和ng-class表達式在摘要循環期間被評估 - 所以它會運行100次,只是爲了評估它必須運行100次以上與模板本身的原始解決方案相同的結果 – doodeec

相關問題