2016-06-23 8 views
1

私は数秒ごとにプレースホルダーを変更したいテキスト入力フィールドを持っています。しかし、私はこれでコントローラを汚染したくないので、この機能を指令にカプセル化したいと思います。AngularJSディレクティブでプレースホルダを変更しますか?

これは私のディレクティブは次のようになります。

myApp.directive('searchBox', ['$interval', function($interval) { 
    return { 
     restrict: 'A', 
     link(scope, element, attrs) { 
      $interval(function() { 
       attrs.placeholder = 'New'; 
      }, 1000); 
     } 
    } 
}]) 

とHTML:

<input type="text" class="form-control" placeholder="Old" ng-model="search" search-box> 

プレースホルダは頑固に変更されませんが、コンソールにattrs.placeholderが変更に見ることができるにもかかわらず、 「Hello」から「Test」へ。何か案は?

PLUNKR: https://plnkr.co/edit/Oy1M8FPTXxzB9oYMJqlx?p=preview

答えて

2

あなたは(それがあなたの要素の属性の単なる静的な反射です)attrオブジェクトを介して属性値を変更することはできません。代わりに、element.attr('placeholder', 'Test')またはattrs.$set('placeholder', 'Test')を使用して要素を更新してください。

+1

あなたとあなたの子供たちは、永遠に祝福されることがあります。 – Aron

+0

2つの方法の違いは何ですか? – Aron

+0

あなた自身を見てください:https://github.com/angular/angular.js/blob/b94626cb9bc03a067feb7c6f0302f811edfd8e67/src/ng/compile.js#L1537 基本的に、 'attrs。$ set'はあなたの値に補間を使うことを可能にします(例えば 'attrs。$ set( 'プレースホルダー'、 'テスト{{myVar}}')'、属性キーは 'normal-la-Angular 'で、' data-foo'属性を更新する – Iso

関連する問題