【问题标题】:Search bar is not returning the expected results搜索栏未返回预期结果
【发布时间】:2021-07-06 00:01:08
【问题描述】:

我正在尝试制作一个搜索栏来搜索我的应用中的用户。我已经创建了一种在 ASP .NET 中运行良好的方法

 public async Task<IEnumerable<MemberDto>> Search(string content)
        {

            if (string.IsNullOrEmpty(content))
            {
                return await _context.Users.ProjectTo<MemberDto>(_mapper.ConfigurationProvider).ToListAsync();
            }

            return _context.Users.Where(e => e.UserName.StartsWith(content) ||
                                             e.FirstName.StartsWith(content) ||
                                             e.LastName.StartsWith(content) ||
                                             (e.FirstName + " " + e.LastName).StartsWith(content))
                .ProjectTo<MemberDto>(_mapper.ConfigurationProvider);
        }
       [HttpGet("search")]
        public async Task<ActionResult<IEnumerable<MemberDto>>> SearchUser([FromQuery] string content)
        {
            var users = await _userRepository.Search(content);

            return Ok(users);
        }

在我的主页中,我创建了一个带有搜索按钮的搜索栏。写完一个字符串后,我希望能够按下搜索按钮以在另一个页面中返回所有匹配的用户。但是,我无法弄清楚如何做到这一点。这是我的方法:

search(content: string) {
    this.memberService.search(content).pipe(
      map((response: Member[]) => {
        const usernames = response.length;
        (term => term === '' ? [] : usernames);
      }),
      debounceTime(200),
      distinctUntilChanged())
      console.log(content);
  }

我在会员服务中的方法是:

search(content: string) {
    return this.http.get<Member[]>(this.baseUrl + 'users/search?content=' + content);
  }

这是我的html:

<form class="example" (ngSubmit)="search(model.content)" style="margin:auto;max-width:300px">
        <input id="typeahead-format" name="content" [(ngModel)]="model.content" type="text" class="ml-2 
         form-control" placeholder="Caută utilizatori"/>
        <button class="d-flex align-items-center justify-content-center" routerLink="search?= 
         {{model.content}}" type="submit"><i class="fa fa-search"></i></button>
</form>

我在 vendor.js 和 main.js TypeError: Cannot read property 'requestContent' of undefined 中也遇到了错误 我在 TypeScript 方法中做错了什么?谢谢!

【问题讨论】:

    标签: angular typescript asp.net-core search


    【解决方案1】:

    试试这个

    search(content: string) {
    this.memberService.search(content).subscribe(response: Member[] => {
    const usernames = response;
    term = term === '' ? [] : usernames;
    }),
      debounceTime(200),
      distinctUntilChanged())
      console.log(content);
    }
    

    搜索栏的 HTML 代码

    <input placeholder="Search" (keyup)="search(model.content)">
    

    检查成员是否返回的代码

    search(content: string) {
    const data = this.http.get<Member[]>(this.baseUrl + 'users/search? 
    content=' + content);
    console.log(data);
    return data;
    }
    

    自动完成

    <mat-autocomplete #auto="matAutocomplete">
    <mat-option *ngFor="let username of usernames" [value]="option">
    {{username}}
    </mat-option>
    </mat-autocomplete>
    

    【讨论】:

    • 截至未定义的“requestContent”显示包含“requestContent”的代码
    • 感谢您的回答。 requestContent 错误消失了。搜索栏现在效果更好,但它只过滤我已经搜索过的名字,而不是所有用户名的名字。 const usernames = response.length" 这行写得不好。我想提取所有成员的用户名并对其进行过滤,而不是通过响应长度。
    • 哦,我的代码有错误。我已经编辑过了。 'term ===' 是错误的。它是'term ='
    • 作为用户名试试这个: const usernames = response;假设响应是一个数组。 Array.length 返回数组的长度。
    • 我进行了更改并将其添加到我的 html 搜索按钮中:&lt;button class="d-flex align-items-center justify-content-center" (input)="search(model.content)" routerLink="search/{{model.content}}"&gt;&lt;i class="fa fa-search"&gt;&lt;/i&gt;&lt;/button&gt;。当我在搜索栏中输入时,甚至没有调用该函数。我也尝试过 (keyUp)、(keyPress) 和 (change) 但没有成功
    猜你喜欢
    • 1970-01-01
    • 2020-05-04
    • 1970-01-01
    • 1970-01-01
    • 2021-01-22
    • 2020-05-20
    • 1970-01-01
    • 2016-08-05
    • 1970-01-01
    相关资源
    最近更新 更多