通过AngularJS指令更改占位符?
我有一个文本输入字段,我想每隔几秒钟更改它的占位符。然而,我不想用它污染我的控制器,所以我想把这个功能封装到一个指令中 我的指令是这样的:通过AngularJS指令更改占位符?,angularjs,angularjs-directive,Angularjs,Angularjs Directive,我有一个文本输入字段,我想每隔几秒钟更改它的占位符。然而,我不想用它污染我的控制器,所以我想把这个功能封装到一个指令中 我的指令是这样的: myApp.directive('searchBox', ['$interval', function($interval) { return { restrict: 'A', link(scope, element, attrs) { $interval(function() {
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>
然而,尽管在控制台中可以看到占位符从“Hello”更改为“Test”,但占位符始终没有更改。有什么想法吗
您不能通过
attr
对象更改属性值(它只是元素属性的静态反映)。相反,请使用element.attr('placeholder','Test')
或attrs.$set('placeholder','Test')
更新您的元素。祝您和您的孩子永远幸福。这两种方法之间的区别是什么?请自己看看:基本上,attrs.$set
允许您在值中使用插值(例如,attrs.$set('placeholder','Test{{myVar}}')
,属性键是“规范化的”a-la Angular,这意味着更新将使用dataFoo
作为键的dataFoo
属性。element.attr
只是一个常规的DOM属性更新。attrs.$set
也会触发观察者(使用属性设置。$observe
)并使用ngSanitizeOk清除值,听起来$set就是要选择的。谢谢!