web-dev-qa-db-ja.com

モデルを介して入力プレースホルダーの値を変更しますか?

私はコントローラーから入力プレースホルダーの値を変更しようとしていますが、どうすればよいかわかりません。

input(type='text', ng-model='inputText', side='30', placeholder='enter username')

モデルの要素属性を変更する方法はありますか?

61
Jonah Katz

コントローラの変数とバインドできます:

<input type="text" ng-model="inputText" placeholder="{{somePlaceholder}}" />

コントローラー内:

$scope.somePlaceholder = 'abc';
120

受け入れられた答えは、IEにJavaスクリプトエラーを投げました(少なくともAngular 1.2の場合)。これはバグですが、回避策は https://docs.angularjs.org/guide/interpolation で詳しく説明されているngAttrを使用することです

<input type="text" ng-model="inputText" ng-attr-placeholder="{{somePlaceholder}}" />

問題: https://github.com/angular/angular.js/issues/5025

21
ysub

AngularJSにはjQueryのようにディレクティブDOM操作がないため、1つの要素の属性を変更する適切な方法はディレクティブを使用することです。ディレクティブのリンク機能を使用すると、要素とその属性の両方にアクセスできます。

入力全体を1つのディレクティブにラップしても、コントローラープロパティを介してng-modelのメソッドを導入できます。

このメソッドは、ngmodelのロジックをプレースホルダーとコントローラーから分離するのに役立ちます。それらの間に論理がなければ、ワーグナー・フランシスコが言ったように間違いなく行くことができます。

7
Z.T. Yang

ワーグナーフランシスコが言ったように(JADEで)

input(type="text", ng-model="someModel", placeholder="{{someScopeVariable}}")`

そして、あなたのコントローラーで:

$scope.someScopeVariable = 'somevalue'
4
amit_kenny