Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >角度材质动态菜单内容不显示

角度材质动态菜单内容不显示
EN

Stack Overflow用户
提问于 2021-07-28 15:22:01
回答 2查看 39关注 0票数 0

我是angular的新手,正在努力使一个组件到位,其中包括一个文本输入字段,一旦输入超过3个字符,就会发出服务调用,在数据库中搜索数据,并返回弹出菜单中使用的项目数组以供选择。

我已经准备好了服务并适当地返回,菜单项在我想要的时候弹出,在我想要的时候消失,但是我不能让菜单显示任何内容。它总是以空盒子的形式出现。我能够让mat-menu在我的应用程序中的其他地方作为上下文菜单工作,这看起来很好,所以我不确定我在这一点上遗漏了什么。有人知道出什么问题了吗?

模板代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  <div>
    <mat-menu #searchResultMenu="matMenu" yPosition="above" *ngIf="searchResults.length > 0">
      <ng-template matMenuContent let-searchResults="searchResults">
        <button mat-menu-item *ngFor="let sritem of searchResults" (click)="findAndSelect(sritem)">
          {{sritem.displayName}}
        </button>
      </ng-template>
    </mat-menu>

    <!-- div below is really just there so I can open/close the menu 
         in typescript code rather than with a visual UI component action. 
    -->
    <div #menuTrigger [matMenuTriggerFor]="searchResultMenu" [matMenuTriggerData]="searchResults"></div>

    <mat-form-field>
      <mat-label>Search String</mat-label>
      <input matInput type="text" [value]="searchString" (input)="searchStringChanged($event)">
      <button *ngIf="searchString" matSuffix mat-icon-button aria-label="Clear" (click)="searchString=''">
        <mat-icon>clear</mat-icon>
      </button>
    </mat-form-field>
  </div>

typeScript代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@ViewChild(MatMenuTrigger) menuTrigger: MatMenuTrigger;
public searchResults: SearchResultItem[];

* * *

  searchStringChanged(ev:Event) {
    this.searchString = <string>((<any>ev.target)?.value);

    if (this.searchString?.length > 3) {
      this.myservice.getSearchResults(this.searchString).subscribe(data => {
        <!-- prove to myself I'm getting a result set: -->
        console.log("search returned results: ", data);

        if (data.length > 0) {
          this.searchResults = data;
          this.menuTrigger.menuData = this.searchResults;
          this.menuTrigger.openMenu();
        }
      });
    }
  }
 
  clearSearchString() {
    this.searchString = "";
    this.searchResults = [];
    this.menuTrigger.closeMenu();
  }

  findAndSelect(sritem: SearchResultItem) {
    console.log("Searching for item named: ", sritem.displayName);
    this.menuTrigger.closeMenu();
  }

* * *

searchResult是从我的服务返回的SearchResultItem对象的数组,我验证了它在菜单出现时是填充的,并且每个对象都包含一个名为“displayName”的字符串参数。

提前谢谢。

其他信息:

我在UI中看到的:UI screenshot

我在调试控制台中看到的从我的服务返回的内容:debug console screenshot

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-07-28 18:01:20

去掉let-searchResults="searchResults“,它就可以工作了

票数 0
EN

Stack Overflow用户

发布于 2021-07-28 19:18:00

虽然上面回答了我最初的问题,但我还有其他一些运行时错误,即使UI运行良好,也会弹出错误。我最终找到了他们,并清理了我的原始帖子,如下所示。我只是想我应该添加这一点,以防其他人试图复制我最初在下面posted...use的代码。基本上,我从mat-menu标记中删除了ngIf,并在模板和typescript中相应地更新了组件,以及原始问题解决方案的更改。

非常感谢Faizal的评论/回答。

模板代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  <div>
    <mat-menu #searchResultMenu="matMenu" yPosition="above">
      <ng-template matMenuContent>
        <button mat-menu-item *ngFor="let sritem of searchResults" (click)="findAndSelect(sritem)">
          {{sritem.displayName}}
        </button>
      </ng-template>
    </mat-menu>

    <div style="visibility: hidden; position: fixed" [matMenuTriggerFor]="searchResultMenu">
    </div>

    <mat-form-field>
      <mat-label>Search String</mat-label>
      <input matInput type="text" [value]="searchString" (input)="searchStringChanged($event)">
      <button *ngIf="searchString" matSuffix mat-icon-button aria-label="Clear" (click)="searchString=''">
        <mat-icon>clear</mat-icon>
      </button>
    </mat-form-field>
  </div>

打字代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@ViewChild(MatMenuTrigger) searchResultMenu: MatMenuTrigger = <MatMenuTrigger><unknown>null;
public searchResults: SearchResultNode[] = [];

* * *

  searchStringChanged(ev:Event) {
    this.searchString = <string>((<any>ev.target)?.value);

    if (this.searchString?.length > 3) {
      this.myservice.getSearchResults(this.searchString).subscribe(data => {
        <!-- prove to myself I'm getting a result set: -->
        console.log("search returned results: ", data);

        if (data.length > 0) {
          this.searchResults = data;
          this.searchResultMenu.menuData = this.searchResults;
          this.searchResultMenu.openMenu();
        }
      });
    }
  }
 
  clearSearchString() {
    this.searchString = "";
    this.searchResults = [];
    this.searchResultMenu.closeMenu();
  }

  findAndSelect(sritem: SearchResultItem) {
    console.log("Searching for item named: ", sritem.displayName);
    this.searchResultMenu.closeMenu();
  }

* * *
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68563125

复制
相关文章
C# 用树形列表 动态 显示菜单
明志德道
2023/10/21
3840
C# 用树形列表 动态 显示菜单
动态显示下拉框内容
过了冬至,你在北方瑟瑟发抖,我在广东秋风瑟瑟~ 最近小编经常梦回母校~放一张母校的美图! 年底了,又到了预订报刊的时候! 肯定有人会问,这年头还有谁看报刊哇! 小编只能回应: 知道全国有多少种
用户1332619
2018/03/08
2.2K0
动态显示下拉框内容
隐藏菜单显示
<!DOCTYPE html> <html lang="en" > <head> <meta charset="UTF-8"> <title>CodePen - Menu Button Interaction</title> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/normalize/5.0.0/normalize.min.css"> <link rel="stylesheet" href="./
拿我格子衫来
2022/01/24
3K0
隐藏菜单显示
动态加载用户菜单
流程是用户登录后进入模块页面,点击不同的模块,进入菜单页面(模块不同,菜单内容也不同)
tianyawhl
2020/02/18
2.2K0
动态加载用户菜单
AdminLTE实现动态菜单
本篇内容基于上一篇AdminLTE实现局部刷新,在完成局部刷新后,不满足其左侧菜单栏的写死状态,希望后期能从数据库读取动态生成,故有了本篇尝试。
WindCoder
2018/09/19
4.7K0
AdminLTE实现动态菜单
排查右键菜单不显示/显示慢问题
当我们右键资源管理器/浏览器的时候,会弹出菜单。你有没遇到过右键时不会弹出菜单或菜单弹出很慢?特别是安装一些软件后某一天发现了该问题,但又不知道是哪款软件所致。笔者最近遇到该问题,用网上的查看/修改注册表等方式未解决,最后使用ShellExView工具解决了。接下来将给大家介绍如何使用ShellExView工具排查/修复。
gaigai
2021/02/04
1.3K0
jquery easyui菜单树显示
目前做了一个easyui项目需要显示多级菜单,菜单配置到数据库中,因此每级菜单都需要到数据库中取,用了jQuery EasyUI方便多了。
全栈程序员站长
2022/07/15
3.4K0
React 动态菜单-不限级递归菜单树
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/159442.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/17
1.6K0
centos打开windows的ftp 无法显示内容 显示空白内容
centos下gnome打开windows FTP显示空白,无内容,windows下 打开正常。
全栈程序员站长
2022/07/05
6.3K0
centos打开windows的ftp 无法显示内容 显示空白内容
动态内容缓存
4.1 缓存与速度 这里所说的动态内容缓存是自行实现的缓存机制,包括整页缓存、局部缓存、数据缓存等。 缓存的目的是把花费昂贵开销的计算结果保存起来,以后需要的时候直接取出,避免重复的计算,一切缓存的本质都是如此。 CPU缓存是位于CPU和内存之间的临时寄存器,它的容量不大,但交换速度高于内存,CPU把频繁交换的数据放在缓存中,以后需要的时候直接从缓存中读出,从而避免访问速度较慢的内存。 缓冲(Buffer)的目的在于改善各部件速度不匹配的问题。例如:用户态空间的数据写入磁盘时
李海彬
2018/03/23
2.3K0
解析动态内容
根据权威机构发布的全球互联网可访问性审计报告,全球约有四分之三的网站其内容或部分内容是通过JavaScript动态生成的,这就意味着在浏览器窗口中“查看网页源代码”时无法在HTML代码中找到这些内容,也就是说我们之前用的抓取数据的方式无法正常运转了。解决这样的问题基本上有两种方案,一是JavaScript逆向工程;另一种是渲染JavaScript获得渲染后的内容。
润森
2022/08/18
1.3K0
解析动态内容
Element UI导航菜单(NavMenu),动态多级菜单实现
今天同事封装一个导航栏的组件,使用的 Element UI 的 NavMenu 组件。
德顺
2020/12/28
15.2K0
动态加载的树形菜单
在做到页面需要做到树形菜单,而且还是动态从数据库加载数据的,就是树形菜单的节点由数据库的数据来填充。
PHY_68
2020/09/16
3K0
动态加载的树形菜单
Element UI导航菜单(NavMenu),动态多级菜单实现
今天同事封装一个导航栏的组件,使用的 Element UI 的 NavMenu 组件。
德顺
2023/08/25
1.5K0
menuStrip鼠标经过自动显示菜单
//--------------------------------------------------------------------------------- private void Form1_Load(object sender, EventArgs e) { this.menuStrip1.Items[0].MouseHover += new EventHandler(Form1_MouseHover); } //----------------------------------
跟着阿笨一起玩NET
2018/09/19
1.8K0
bootstrap 徽章 菜单旁边显示数字
<a href="#">Mailbox <span class="badge">50</span></a>
用户5760343
2019/07/05
1.1K0
bootstrap 徽章 菜单旁边显示数字
CAD2007操作教程下
图层相当于图纸绘图中使用的重叠图纸,创建和命令图层,并为这些图层指定通用特性。通过将对象分类放到各自的图层中,可以快速有效地控制对象的显示以及其进行更改。(例如墙体或标注)
用户7505898
2020/09/02
8.6K0
vue实现动态权限与菜单
相信很多的前端工作者都遇到过路由动态权限的需求,有些小伙伴一时之间也不知道该如何下手
前端小tips
2021/11/30
2.3K0
vue实现动态权限与菜单
vue 点击菜单动态生成Tab
UI 组件采用element  NavMenu点击左侧的菜单列表生成Tab,如下图
tianyawhl
2020/02/20
4.3K2
点击加载更多

相似问题

角度材质材质-菜单

13

角度材质md-菜单-内容高度问题

110

角度材质不工作(包括所有内容)

10

角度材质2选项卡动态内容

19

角度材质选择菜单未正确显示

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文