我使用的是Angular Bootstrap typehead指令,可以从HTML配置,如下所示:
<div ng-controller="search">
<input typeahead-focus-first="false" />
</div>
是否可以设置&#39; typeahead-focus-first&#39;来自ng-controller的属性改为?
答案 0 :(得分:2)
如果您的控制器范围具有属性
$scope.typeahead = true;
然后
<div ng-controller="search">
<input ng-if="typeahead" typeahead-focus-first="false" />
<input ng-if="!typeahead" />
</div>
或
<div ng-controller="search">
<input typeahead-focus-first="typeahead" />
</div>
第二种方法要求你的typeahead指令能够解析typeahead表达式。有几种方法可以实现这一点(例如隔离范围或$ parse)。角度引导程序中的typeahead指令为您执行此操作,因此第二种方法应该可以正常工作。
编辑:作为指令
.directive('search', function() {
return {
restrict: 'E',
template: '<div><input typeahead-focus-first="false" /></div>',
scope: true,
controller: function($scope) {
},
link: function(scope, element, attrs) {
//this is where you want to do your DOM manipulation (if any)
}
};
})
用法:
<search></search>
答案 1 :(得分:1)
使用以下表达式从attr
评估typeahead属性:
var focusFirst = originalScope.$eval(attrs.typeaheadFocusFirst) !== false;
因此您应该在范围中设置变量
$scope.typeahead = true;
然后
<div ng-controller="search">
<input typeahead-focus-first="{{typeahead}}" />
</div>
预先输入来源here。
编辑: 从评论中可以看出,您希望从控制器编辑行为而无需在dom上编写任何内容。不幸的是,我认为这是不可能的,因为控制该行为的变量在编译时保存在闭包内,并且在链接组件后不可修改。您需要重新编译组件以更改该行为,例如ng-if。