html5 datalist上的ng-click事件无法工作angularjs

时间:2018-05-16 05:42:34

标签: javascript angularjs json html-datalist

我尝试自动搜索并选择产品。我需要重定向到与所选下拉列表相关联的产品网址。我能够获得所有搜索结果。

我为所有搜索列表创建了数据列表,并在datalist上创建了ng-click事件,以将选定的详细信息发送给控制器。但是ng-click在datalist中不起作用。你能帮帮我吗

for.eg。在(key,data)。中,我需要在前端搜索框中显示data,但是在从datalist中选择数据时,我需要将其各自的key发送到控制器

有问题的部分供您参考(plunker中的完整代码):

<h2>Custom search field</h2>
            <div id="custom-search-input">
                <div class="input-group col-md-12">
                    <input type="text" class="form-control input-lg"  list="suggestions" placeholder="search" ng-model="obj.searchText" ng-focus="searchSuggest()" />
                    <span class="input-group-btn">
                        <button class="btn btn-info btn-lg" type="button" ng-click="showProduct(obj)">
                            <i class="glyphicon glyphicon-search"></i>
                        </button>
                    </span>
                </div>
            </div>
            <div>
                <datalist id="suggestions">
                    <p ng-repeat="values in suggestionResults track by $index"><option ng-repeat="(key,data) in values" value="{{data}}"  ng-model="selectedProduct" ng-click="showProduct({key: key, data: data})"></p>
                </datalist>

            </div>
  

在上面的代码中,您可以看到键和数据。我只需显示数据值,但选择一个选项。我需要将相应的URL链接发送到conroller。在ng-repeat

中创建了 datalist      

请从下面的plunker链接中的文本框中的下拉列表中选择一个值

*

  

我更新了plunker,以便在搜索中也可以看到URL   下拉列表。我需要将该URL传递给conroller。请帮忙   我如何实现它

*

plnker code here

2 个答案:

答案 0 :(得分:1)

你的ng-click在chrome中被触发了,我可以看到你的console.logs数据。

我检查你的代码,你的搜索逻辑不起作用的原因,你继续得到&#34;不匹配&#34;在您的控制台中,您使用的是错误的条件,您没有检查值,使用搜索字符串,您正在检查&#34;键/值对象&#34;用搜索字符串。

将showProduct方法中的if条件更改为:

if ($scope.suggestionResults[i][Object.keys($scope.suggestionResults[i])[0]] == searchText) {
   console.log(Object.keys(response.data[i])[0]);
   $scope.redirectLink = Object.keys(response.data[i])[0];
}else{
   $scope.redirectLink = "not matching";
}

答案 1 :(得分:1)

Check this plunkr

我写了另一种方法

$scope.inputChanged = function(data){
  var obj = _.find($scope.suggestionResults,function(o){
     var keyArr = Object.keys(o);
     return o[keyArr[0]] === data
  })
  $scope.showProduct(obj)
}

这可以作为一种解决方法来实现您的目标。在这里,您可以致电$scope.showProduct(obj)并实现ng-click事件行为