ElasticUI -使用ng-click触发搜索/排序

ElasticUI - Triggering search/sort with ng-click

本文关键字:搜索 排序 使用 ng-click ElasticUI      更新时间:2023-09-26

摘自我和作者之间的一封电子邮件。我已经把它从e-mail移到了SO,希望它能让其他人受益。ElasticUI可以在这里找到

My Original Question(s)

  1. 我看到搜索是eui-enabled by querystring.length。我们希望通过按钮来触发搜索和排序,而不是通过按钮手表的功能。
  2. 当搜索没有返回结果时,这有点令人困惑。而不是一个no results found消息,它只是返回聋(全部)结果。是否有可能在默认情况下使结果为空那还全部吗?

作者的回答

1+2 -这两种情况都有可能。在AngularJS中,记住"模型"是什么变量你使用和连接到你的UI/指令,一些东西以下几行是有意义的

<div eui-query="ejs.MatchQuery('textField', querystring)" eui-enabled="querystring.length"> <input type="text" ng-model="querystring_live" />
<input type="button" ng-click="querystring=querystring_live" /> </div>
<div ng-if="!querystring.length"> No query specified </div>

注意点击时发生了什么。你也可以包装一个ng-if子句围绕您的结果,只显示结果时,查询已经指定。

当我包括这个片段时,ng-if条件不采取("没有指定的查询"始终保持),并且在提交搜索后,结果是空白的,即使它的查询我确信应该返回结果。

作为angular的新手,一个明显的错误可能会超出我的理解。有什么明显的缺失吗?

编辑发现问题:忘记填写要运行查询的字段:eui-query="ejs.MatchQuery('post_title', querystring)" ('post_title'是ES字段)

虽然看起来你可能已经找到了答案,但我认为你上面发布的"作者回答"(我)仍然有一个错误。似乎我掉进了Angular的点问题。这应该会更好:

<div ng-init="qs_model={live:'', after_click:''}">
            Debug: {{qs_model | json}}
            <h3>Search</h3>
            <div eui-query="ejs.MatchQuery('tweet.text', qs_model.after_click)" eui-enabled="qs_model.after_click.length">                             
                <input type="text" ng-model="qs_model.live" />
                <input type="button" ng-click="qs_model.after_click=qs_model.live" /> 
            </div>
            <div ng-if="!qs_model.after_click.length">No query specified </div>
        </div>

在控制器中定义qs_model比上面演示的ng-init更简洁。

还要注意,即使eui-query被禁用(没有指定querystring), ElasticUI此时仍然会在后台执行MatchAll查询(您可以选择使用ng-if隐藏结果)。