2014-03-13 64 views
3

我想比較一個變量的值與一個常量字符串,我不能讓if語句正常工作。我用Jade使用Angular.js。玉如果聲明不能與變量

這是我的代碼。

ol 
    li(ng-repeat = "notification in notificationData") 
    - var typeOfNotification = '{{ notification.typeOfNotification }}' 
    p #{ typeOfNotification } 
    -if (typeOfNotification == 'like') 
     p LIKED 
    -else 
     p ELSE 

這使輸出

like 

ELSE 

follow 

ELSE 

like 

ELSE 

like 

ELSE 

follow 

ELSE 

if語句不會求到爲真,即使在上面的線p #{ typeOfNotification }表明變量包含某些情況下,價值like。我應該如何改變我的Jade代碼才能正常工作?

謝謝。

回答

3

這裏的問題是:Jade的評估將在Angular初始化之前完成。
所以你不能混合它!

你在服務器端渲染Jade模板嗎?或者,您是否將其編譯爲JavaScript並在客戶端上加載模板?

對於第一個版本你不能這樣做,因爲第二個版本需要在使用Jade將模板渲染到DOM之前先啓動Angular,然後將上下文傳遞給Jade模板。

無論如何,如果您將Jade中的邏輯提取爲您的Angular代碼,則可以解決此問題。 我不熟悉的角,所以ng-call是我的僞角指令,它可以調用它的定義,並在全球範圍內訪問,並把返回的值中的元素節點一個簡單的函數:

script. 
    var getNotificationType = function(notification) { 
    return notification.typeOfNotification 
    } 
    var typeIsLike = function(n) { 
    var type = getNotificationType(n); 
    if (type === 'like') { 
     return 'LIKED'; 
    } 
    return 'ELSE'; 
    } 
    var foo = "bar"; 


ol 
    li(ng-repeat = "notification in notificationData") 
    p(ng-call = "getNotificationType(notification)") 
    p(ng-call = "typeIsLike(notification)") 

BTW:你可以寫p= typeOfNotification代替p #{ typeOfNotification }
(如果它的工作;)

+0

這很有道理。謝謝! – matthewpalmer

0

你不能,如果使用變量從角玉但你可以用角ng-if in jade。

ol 
    li(ng-repeat = "notification in notificationData") 
    p(ng-if= "notification.typeOfNotification == 'like'") LIKED 
    p(ng-if= "notification.typeOfNotification != 'like'") ELSE