2015-02-10 58 views
0

想知道是否有以下情況的推薦解決方案。您的標記中的角度複雜表達與功能

我在我的標記中有一個複雜的表達式來顯示一些錯誤消息,例如,

ng-show="currentSection == 'pickup-from' && carHireEnquiryForm.pickUpLocation.$dirty && carHireEnquiryForm.pickUpLocation.$invalid && carHireEnquiryForm.pickUpLocation.$error.isLocation" 

這可能會使標記混亂,很難單元測試,所以爲了解決這個問題,我爲此創建了一個函數,例如,

ng-show="isShowError()" 

現在可以輕鬆測試isShowError。現在的問題是,即使元素不可見,也會在每個摘要上調用isShowError。這對我來說甚至是最糟糕的,因爲它的表現非常重要。

有沒有更好的方法來實現這一目標?表達式是推薦的方式嗎?如果表達式必須包含20個陳述呢?我熱衷於減少標記中的業務邏輯量。

預先感謝

回答

2

沒有太多使用功能和表達,考慮到這一事實,該功能還評價等的表達之間的差異。

意味着如果您只是使用表達式,那麼也會在每個摘要循環中對其進行評估。該函數只是添加輕量級間接。

只要表達式評估速度快,您可以使用,但函數更好,因爲它們可以封裝驗證邏輯。

問題出現時,我們故意或不知不覺地在功能上添加了一些耗時的操作,從而減慢了功能評估的速度。

+0

表達式是否對每個摘要進行評估,還是隻使用只在「更改」時才進行評估的手錶?我不知道如何證明這一點。 – Cuong 2015-02-10 13:02:07

+0

說實話,這正是我的想法開始.....「所以這些功能運行了多少次」.....但6個月後,按照相同的模式線我現在有000多萬不必要的'小'​​的函數調用,我認爲這是在移動設備上殺死我的應用程序。 – Cuong 2015-02-10 13:06:13

+0

要確定「何時更改」,必須在每個摘要循環中對其進行評估。另見http://stackoverflow.com/questions/9682092/databinding-in-angularjs – Chandermani 2015-02-10 13:07:01