4

如何从AngularUIUI 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)
{ ... }

但我没有办法让我捕捉到这样的事件。选择预输入选项后,有什么方法可以采取额外的措施吗?

4

3 回答 3

5

此外,在 ui-bootstrap 库的 0.4.0 版本中,typeahead-on-select现在支持该指令。这应该提供您想要的事件。

见: https ://github.com/angular-ui/bootstrap/commit/91ac17c9ed691a99647b66b3f464e3585398be19

于 2013-06-28T18:57:32.697 回答
1

似乎没有办法在指令中挂钩该事件。但是,您可以关注模型值并模拟此行为。

看看这个 plunker例子

由于您正在从服务器动态提取数据列表,因此此解决方案可能不适合您。但我肯定会看看手表,这似乎是实现预期结果的最佳方式。

沿着这些路线的东西可能会起作用。

$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
    }
});
于 2013-05-10T00:13:35.877 回答
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

于 2013-08-28T20:22:46.233 回答