如何从AngularUI的UI Bootstrap指令中捕获“更新程序”事件?
我已经定义了我的HTML:
<input type="text" pattern="[0-9]*" class="span6" placeholder="8675309" ng-model="empid" typeahead="entry for entry in httpEmpIdSearch($viewValue, 8)">
...以及我的相关功能:
$scope.httpEmpIdSearch = function(query, limit)
{
return $http.get(
'/visitorLog/api/v1/employee/?limit=' + limit + '&empid__startswith=' + query
).then(function(response)
{
output = [];
angular.forEach(response.data.objects, function(value, key) {
this.push(value.bems.toString());
}, output);
return output;
});
}
当用户点击弹出窗口中的ID时,我想采取其他操作(自动填充表单)。如果原始Bootstrap我会使用“更新程序”:
$('#sampleElement').typeahead({
minLength: 3,
source: function (query, process)
{
// get the data
},
updater: function (item)
{
// user clicked on an item, do something more!
},
});
我尝试过各种各样的听众:
$scope.$on('typeahead-updated', function(event)
{ ... }
但是我没办法让我抓住这样的事件。有一些方法,一旦选择了预先输入选项,我可以采取额外的行动吗?
答案 0 :(得分:5)
此外,在ui-bootstrap库的0.4.0版本中,现在支持typeahead-on-select
指令。这应该提供您想要的活动。
请参阅: https://github.com/angular-ui/bootstrap/commit/91ac17c9ed691a99647b66b3f464e3585398be19
答案 1 :(得分:1)
似乎没有办法在指令中挂钩该事件。但是,您可以监视模型值并模拟此行为。
查看此plunker example
由于您正在从服务器中提取数据列表,因此该解决方案可能不适合您。但我肯定会看一下这似乎是达到理想结果的最好方法。
这些方面的东西可以起作用。
$scope.output = [];
$scope.httpEmpIdSearch = function(query, limit)
{
return $http.get(
'/visitorLog/api/v1/employee/?limit=' + limit + '&empid__startswith=' + query
).then(function(response)
{
$scope.output.length = 0;
angular.forEach(response.data.objects, function(value, key) {
this.push(value.bems.toString());
}, $scope.output);
return $scope.output;
});
}
$scope.$watch('empid', function(newValue, oldValue){
if(newValue !== oldValue && $scope.output.indexOf(newValue) !== -1){
//do work here
}
});
答案 2 :(得分:0)
typeahead相关指令的完整列表如下:
https://github.com/angular-ui/bootstrap/tree/master/src/typeahead/docs
typeahead-editable,typeahead-input-formatter,typeahead-loading,typeahead-min-length,typeahead-on-select,typeahead-template-url,typeahead-wait-ms