2016-08-30 72 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)); 

恢复它。