通过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就是要选择的。谢谢!