2016-08-30 9 views
0

フォームの提出時にボタンのテキストを「しばらくお待ちください」、「成功」または「失敗」に変更する指示文を使用しています。ユーザーがフィールドを変更すると、元の値に復元されます。指示文の中で元のテキストを変更した後に元に戻す

私は、それがうまく働いた

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

通常を使用して、それを設定する前に元の値を格納することで、それをしなかったが、それは時と失敗

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

などの変数ボタンのテキストと私は評価された式を得ます。つまり、 "update"または "create"に翻訳されていますが、その式が必要です。

だから、私はディレクティブ初めにそれを行うに切り替えて、私は大丈夫です

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

を得るが、私はそれがどのように評価することができますか?私は

$parse(buttonText) 

を試みたが、それは私が中括弧を取り除くことができ、それはAdd {{item}} to {{list}}のような表現で、より複雑得ることができる、これだけきれいな方法は、用途をangularjsものを使用している

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}}].

につながります。しかし、それは何ですか?

ng-bindも処理したいので、私の指示が一般的です。

+0

モデルを操作したり、マークアップの別の部分にメッセージを表示したりする代わりに、手動で要素を変更しようとすると、もっと楽になるかもしれないと思います。 – dwbartz

+0

@dwbartzモデルを操作することは、すべてのフォームのスコープに何かを追加し、すべてのボタンのテキスト表現をそれに依存させることを意味します。確かに簡単ですが、それは醜いので、私の指示は半分しか役に立たないようにします。別の領域もシンプルであるだけでなく、繰り返しもあります。ボタン自体はIMHOの完璧な場所です。 +++私はむしろ、適切な解決策は複雑ではないこと、私はちょうど正しいサービスが足りないと確信しています。 – maaartinus

+0

@maartinusすべてのボタンを変更したい場合は、transclusionを使用するディレクティブを作成し、サービスを追跡するフォームの送信が進行中のときにディレクティブを配置するボタンを非表示にします。 – dwbartz

答えて

0

全体の問題は、$parse$interpolateが混在していました。だから、解決策は、それを復元するために

var buttonText = button.text(); 
冒頭

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

を行うことです。

関連する問題