2014-07-11 23 views
2

在我的HTML,我嘗試做以下我怎樣才能連接兩個變量,包含整數,與angularjs?

{{firstvar + secondvar | myFilter}} 

但是我的過濾器中它只是及彼第二個變量。我如何將這兩個變量連接起來發送給過濾器?

UPDATE

這是奇怪的,如果我添加一個空字符串,以它的工作中,

{{firstvar + "" + secondvar | myFilter}} 

雖然它似乎應該有一個更好的解決方案

+0

似乎爲我工作:http://plnkr.co/edit/lqN6OGpavfPaR4VwsERe?p=preview可以請你發佈一個顯示問題的重擊者嗎? – haimlit

+1

firstvar和secondvar的值是什麼? –

+0

@JasonGoemaat他們是整數。可能爲什麼haimlit的工作 – Metropolis

回答

4

我有一種預感,這是不適合你的工作,因爲你在這裏使用的不是字符串的數字。角度爲{{...}}的語法允許我們描述一個我們想在角度摘要DOM時評估的JavaScript表達式。這裏的關鍵是角度正在使用(幾乎)與在普通的舊JavaScript表達式中使用的規則相同的規則來評估表達式。你可以看到這條規則的注意事項here

爲了說明這一點,讓我們想象一下:

var firstvar = 1; 
var secondvar = 2; 

現在,考慮到我們剛剛分配到firstvarsecondvar值,你會我們預計在下面的表達式中result價值是什麼?

var result = firstvar + secondvar

那麼,既然我們知道這些都是數字,明顯的答案是result等於3(1 + 2 = 3,太神奇了!)。

這裏的關鍵是,當JavaScript引擎評估{{ firstvar + secondvar | myFilter }}時,它會看到兩個數字,而不是兩個字符串。因此使用+運算符將導致加上而不是字符串連接。

至於爲什麼你沒有在你的過濾器中獲得正確評估的表達式值,我不確定。從我的快速測試和通過angular documentation的瀏覽,我無法找到你有這個問題的原因。使用過濾器的語法是:

{{ expression | filter }} 

因此,任何有效的JavaScript表達式(下文角的rules)應該工作。換句話說,你在上面發表的表達完全有效。事實上,在我自己的闖入者中,我創造了一個與你所描述的相似的情況,而我沒有看到任何問題。它按照預期評估表達式,我在myFilterexample plunker中看到正確的值。

當您使用表達式{{ firstvar + "" + secondvar | myFilter }}時,串聯工作的原因是因爲您的""表達式正在創建一個空字符串對象。當JavaScript引擎看到+與這個新的字符串對象結合時,它會嘗試序列化firstvarsecondvar(換句話說就是將它們變成字符串)。這會導致我想象的是您的原意,即將序列號的值連接爲firstvarsecondvar。在我看來,這是導致字符串連接的完全有效的方式,因爲結果相當於爲每個變量調用toString()方法。如果你願意,你也可以直接調用每個變量的toString()方法,像這樣:

{{ firstvar.toString() + secondvar.toString() | myFilter }} 

這基本上是等價的,不過你避免了空字符串對象的創建不必要的。

因此,簡而言之,可以使用這兩種表達,實現了字符串連接:

{{ firstvar + "" + secondvar | myFilter }} 
{{ firstvar.toString() + secondvar.toString | myFilter }} 

當然,這是所有假設使用的是比string之外的類型(在這種情況下沒有序列化將是必要的,它已經是一個字符串!)無論如何,希望這清除了一些事情。

+0

我相信你在這是正確的。出於某種原因,它應該發生在我身上,它將像javascript一樣將它們加在一起。我假設括號內的所有變量將被視爲字符串,如果我使用+。 – Metropolis

1

您是否已試過這個

{{(firstvar + secondvar) | myFilter}} 

我會自己做,但我現在沒有AngularJS環境可用,Sry。

+0

是的,我也試過,也 – Metropolis

0

嘗試$parent.$eval(firstvar+secondvar)

+0

看起來很有前途,但它的過濾器中返回undefined。我也嘗試過沒有父母。 – Metropolis

+0

嘗試'$ parent。$ eval('firstvar + secondvar')'? –

+0

不,那剛剛返回第二個變量 – Metropolis