2016-06-23 62 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可以看出,變化從'你好''測試'。有任何想法嗎?

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

回答

2

不能更改通過attr對象屬性值(它只是你的元素的靜態反射屬性)。相反,請使用element.attr('placeholder', 'Test')attrs.$set('placeholder', 'Test')更新您的元素。

+1

願你和你的孩子永遠得到永生。 – Aron

+0

這兩種方法有什麼區別? – Aron

+0

親眼看看:https://github.com/angular/angular.js/blob/b94626cb9bc03a067feb7c6f0302f811edfd8e67/src/ng/compile.js#L1537 基本上,'attrs。$ set'可以讓你在你的值中使用插值(例如'attrs。$ set('placeholder','Test {{myVar}}')',屬性鍵是「標準化」à-la-Angular,意思是更新'data-foo'屬性使用'dataFoo'作爲鍵 'element.attr'只是一個常規的DOM屬性更新 – Iso