2016-08-30 67 views
0

我正在使用指令,在提交表單時將按鈕上的文本更改爲「請稍等」,「成功」或「失敗」。當用戶更改字段時,它將恢復爲原始值。在指令中修改原始文本

我做到了通過存儲原始值只是用

$formElement.find("button").text(); 

通常情況下,它工作得很好設置它之前,但有一個變量按鈕上的文字一樣

<button>{{(entity.id ? "update" : "create") | translate}}</button> 

失敗截至我得到評估的表達式,即翻譯「更新」或翻譯「創建」,但我需要的表達。

所以,我切換到在開始指令的做這件事,我也得到

{(entity.id ? "update" : "create") | translate}} 

這很好,但我該如何評價呢?我試圖

$parse(buttonText) 

,但它會導致

angular.js:13236 Error: [$parse:syntax] Syntax Error: Token '{' invalid key at column 2 of the expression [{{(entity.id ? "update" : "create") | translate}}] starting at [{(entity.id ? "update" : "create") | translate}}].

我可以剝離牙套,但它可能變得更加複雜與表情像Add {{item}} to {{list}},所以唯一的清潔方法是使用什麼angularjs用途。但是它是什麼?

我還想處理ng-bind,以便我的指示是一般的。

+0

我想你可能會採取更困難的方法,試圖手動更改元素,而不是操縱模型或在標記的另一部分顯示「請稍候」的消息。 – dwbartz

+0

@dwbartz操作模型意味着在所有表單的範圍內添加一些東西,並使所有按鈕的文本表達都依賴於它。這當然更簡單,但它很醜,使我的指令只有一半有用。不同的領域也很簡單,但也是重複的。按鈕本身是恕我直言的完美的地方。 +++我很肯定,適當的解決方案並不複雜,我只是錯過了正確的服務。 – maaartinus

+0

@maartinus如果你想要改變所有的按鈕,那麼我會創建一個指令,使用transclusion並隱藏當表單提交正在進行時你放置指令的按鈕,通過服務跟蹤。 – dwbartz

回答

0

整個問題被混淆了$parse$interpolate。因此,解決辦法是做

var buttonText = button.text(); 

在開始和

button.text($interpolate(buttonText)($scope)); 

恢復它。