簡體   English   中英

ngClass OR表達式

[英]ngClass OR expression

我有一個具有ng-class屬性的元素,如下所示:

<label class="item item-input item-floating-label"
              ng-class="{'has-errors':{{loginForm.$submitted && loginForm['AccountLoginForm[username]'].$invalid}} || {{loginForm.$submitted && loginForm['AccountLoginForm[username]'].$valid && success.data.login=='err'}},
                         'no-errors':{{loginForm.$submitted && loginForm['AccountLoginForm[username]'].$valid}} || {{loginForm.$submitted && loginForm['AccountLoginForm[username]'].$valid && success.data.login=='ok'}}">
</label>

但是類沒有應用。 我做錯了什么,寫這樣一個表達式的最佳方法是什么?

您可以在ng-class中編寫JavaScript表達式。 您不需要更多的括號{{}}

<label class="item item-input item-floating-label"
              ng-class="{'has-errors':(loginForm.$submitted && loginForm['AccountLoginForm[username]'].$invalid) || (loginForm.$submitted && loginForm['AccountLoginForm[username]'].$valid && success.data.login=='err'),
                         'no-errors':(loginForm.$submitted && loginForm['AccountLoginForm[username]'].$valid) || (loginForm.$submitted && loginForm['AccountLoginForm[username]'].$valid && success.data.login=='ok')">
</label>

刪除curly braces {{}} ,您發布的代碼將curly braces {{}} ng-class內允許使用邏輯運算符。 但是更好的方法是創建一個函數,並在要測試的條件下使該函數在數字上返回true或false,然后從ng-class中調用該函數。

<label ng-class="{'classOne':check(), 'classTwo': checkAgain()}"></label>

如您在文檔 ng-class中已經看到的那樣:

<ANY ng-class="expression">

您不必在其中使用'{{expression}}'語法。 嘗試:

<label class="item item-input item-floating-label"
       ng-class="{'has-errors': (loginForm.$submitted && loginForm['AccountLoginForm[username]'].$invalid) || (loginForm.$submitted && loginForm['AccountLoginForm[username]'].$valid && success.data.login=='err'),
                  'no-errors': (loginForm.$submitted && loginForm['AccountLoginForm[username]'].$valid) || (loginForm.$submitted && loginForm['AccountLoginForm[username]'].$valid && success.data.login=='ok')">
</label>

但這確實很難閱讀,所以也許更可取的方法是在$ scope內部創建函數:

$scope.hasErrors = function(loginForm, success) {
    return (loginForm.$submitted && loginForm['AccountLoginForm[username]'].$invalid) || (loginForm.$submitted && loginForm['AccountLoginForm[username]'].$valid && success.data.login=='err')
}

然后重構html代碼:

 <label class="item item-input item-floating-label"
       ng-class="{'has-errors': hasErrors(loginForm, success), 'no-errors': !hasErrors(loginForm, success)}">
</label>

請注意,loginForm和成功應該存在於當前的$ scope中。 希望能幫助到你。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM