首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

@ViewChild对表单的引用在带有*ngIf的角度中未定义

@ViewChild是Angular框架中的一个装饰器,用于在组件中获取对模板中元素或组件的引用。它可以用来访问模板中的DOM元素、组件实例或指令实例。

在带有ngIf的情况下,由于ngIf指令会根据条件动态地添加或移除DOM元素,所以在模板初始化阶段,被*ngIf条件隐藏的元素是不可见的,此时使用@ViewChild获取对该元素的引用会返回undefined。

解决这个问题的方法是使用静态属性来获取对元素的引用,而不是在模板初始化阶段使用@ViewChild。可以通过在组件类中定义一个ViewChild属性,并在ngAfterViewInit生命周期钩子函数中给它赋值来实现。

示例代码如下:

代码语言:txt
复制
import { Component, ViewChild, ElementRef, AfterViewInit } from '@angular/core';

@Component({
  selector: 'app-example',
  template: `
    <div *ngIf="condition">
      <input #myInput type="text">
    </div>
  `
})
export class ExampleComponent implements AfterViewInit {
  condition = true;
  @ViewChild('myInput', { static: false }) myInput: ElementRef;

  ngAfterViewInit() {
    console.log(this.myInput); // 输出input元素的引用
  }
}

在上述示例中,我们使用了静态属性{ static: false }来获取对input元素的引用。这样,在ngAfterViewInit生命周期钩子函数中,我们就可以访问到被*ngIf条件隐藏的input元素了。

推荐的腾讯云相关产品:腾讯云云服务器(CVM)、腾讯云云函数(SCF)、腾讯云云数据库MySQL版、腾讯云云原生容器服务(TKE)。

腾讯云产品介绍链接地址:

  • 腾讯云云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 腾讯云云函数(SCF):https://cloud.tencent.com/product/scf
  • 腾讯云云数据库MySQL版:https://cloud.tencent.com/product/cdb_mysql
  • 腾讯云云原生容器服务(TKE):https://cloud.tencent.com/product/tke
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【Angular教程】-内容投影u002F@ContentChildu002F@ViewChild

---- 前言 这一篇我们带来是关于组件基础使用最后一块,内容投影和Vue插槽很类似,在组件封装时候非常有用,我们一起来体验一下。 正文 1....在这种情况下,不建议使用 ng-content 元素,因为只要组件使用者提供了内容,即使该组件从未定义 ng-content 元素或该 ng-content 元素位于 ngIf 语句内部,该内容也总会被初始化...使用ng-container定义我们投影区块 使用ngTemplateOutlet指令来渲染ng-template元素。 通过内置动态指令*ngIf来控制是否渲染投影。...@ContentChild & @ContentChildren 使用这两个装饰器来被投影组件进行操作 使用注解在业务组件定义被投影组件 @ContentChild(HelloWorldComp...@ViewChild & @ViewChildren 使用这两个装饰器来指接子组件进行操作 使用注解在业务组件定义子组件 @ViewChild(HelloWorldComp) helloComp

52830

Angular8稳定版修改概述

我认为这是gulp/grunt“旧时代”命令。 基本上,构建器只是一个带有一组命令函数,您可以createBuilder()从@angular-devkit/architect包传递给方法。.../lazy/lazy.module').then(m => m.LazyModule) 如果你有很多懒加载模块,并希望通过软件包做到这一点,可以点击此处参考 AngularJS API$location...如果要触发一个表单组中所有控件验证,这个方法将是非常有用。...从现在它已从包列表删除。 配置ViewChild / ContentChild查询时间 使用此功能时,必须提供静态标志以定义何时需要解析ViewChild和ContentChild实例。...需要注意是,设置static: true将不允许您从动态模板分辨率(例如*ngIf)获得结果。 添加了原理图支持以将现有代码迁移到此语法,因为将使用此语法Ivy 。

4.5K20

AngularDart 4.0 高级-生命周期钩子 顶

组件有一个由Angular自己管理生命周期。 Angular创建它,渲染它,创建和渲染它子项,在数据绑定属性发生变化时其进行检查,并在将它从DOM删除之前其进行销毁。...同时,前面例子SpyDirective被应用到CounterComponent日志,它监视正在创建和销毁日志条目。...间谍指令可以提供不能直接更改DOM对象洞察。 显然,你不能触摸本地div实现。 您也不能修改第三方组件。 但是你可以监察一个指令。...hero属性值是hero对象引用。 Angular并不在意英雄自己name属性发生了变化。 英雄对象引用没有改变,所以从Angular角度来看,没有改变反馈!...(ChildViewComponent) ChildViewComponent viewChild; ngAfterViewInit() { // viewChild is set after

6.2K10

Angular系列教程-第四节

两者都从视图中捕获用户输入事件、验证用户输入、创建表单模型、修改数据模型,并提供跟踪这些更改途径 使用’@angular/forms’库FormGroup, FormControl,FormArray...,FormBuilder 等类构建出数据对象就是响应式表单,在响应式表单,我们会在数据源里面进行各种操作,像添加校验等,在html文件中使用 formGroup,formGroupName,formControlName...它会控制那些带有 ngModel 指令和 name 属性元素,监听他们属性。...结构型指令 — 通过添加和移除 DOM 元素改变 DOM 布局指令,比如ngfor、ngif 属性型指令 — 改变元素、组件或其它指令外观和行为指令,比如ngstyle 6.属性型指令 6.1...创建 6.2入 6.3编写 7.自定义指令 directive

2.8K50

过渡到 Angular 17 新控制流语法

传统指令与Angular 17控制流语法对比让我们使用一些示例来比较传统指令和Angular 17控制流语法:*ngIf指令 vs @if控制块Before(传统 *ngIf):*ngIf指令和async管道 vs @if和asyncBefore(带有 *ngIf async 管道):...'user': { User Access } @default: { Guest Access } }Angular 17新模板控制块使用...向后兼容性和性能Angular 17允许您在应用程序同时使用新旧语法。就性能而言,值得一提是,Angular团队观察到使用新语法时达到了高达90%速度性能改进。...结论Angular 17新控制流语法在处理Angular应用程序模板和渲染逻辑方面带来了显著改进。转换到这种新语法,承诺会使我们代码更易读、易维护和高性能。

57920

Angular 从入坑到挖坑 - 组件食用指南

因此,这里应该使用模板引用变量方式获取数据信息。 模板引用变量是模板 DOM 元素引用,提供了从模块中直接访问元素能力。...(refMsgInput.value)"> 通过模板引入变量方式获取到输入值:{{refMsg}} 4.2、指令 4.2.1、属性型指令 属性型指令被应用在视图 dom 元素上,用来改变...4.2.2、结构型指令 结构型指令用来操作 dom 树,通过进行一些逻辑判断,从而完成对于页面布局修改 NgIf:根据表达式值(true or false)来创建或者销毁 dom 元素 NgIf 结构型指令 当 expr 属性为 true 时,这个元素则会显示在页面上,当属性值为 false 时,则不显示该元素 ngIf 指令并不是通过使用 css 样式来隐藏元素...非空断言运算符用来告诉编译器特定属性不做严格空值校验,当属性值为 null or undefined 时,不抛错误。

15.8K30

Angular 从入坑到挖坑 - 表单控件概览

一、Overview angular 入坑记录笔记第三篇,介绍 angular 中表单控件相关概念,了解如何在 angular 创建一个表单,以及如何针对表单控件进行数据校验。...四、Step by Step 4.1、表单简介 用来处理用户输入,通过从视图中捕获用户输入事件、验证用户输入是否满足条件,从而创建出表单模型修改组件数据模型,达到获取用户输入数据功能 模板驱动表单...在使用 ngModel 进行模板绑定时,angular 在 form 标签上自动附加了一个 NgForm 指令,因为 NgForm 指令会控制表单带有 ngModel 指令和 name 属性元素,而...同模板驱动表单数据有效性验证相同,在响应式表单同样可以使用原生表单验证器,在设定规则时,需要将模板控件名对应数据值第二个参数改为验证规则 在响应式表单,数据源来源于组件类,因此应该在组件类中直接把验证器函数添加到对应...4.4、表单自定义数据验证 4.4.1、自定义验证器 在很多情况下,原生验证规则无法满足我们需要,此时需要创建自定义验证器来实现 对于响应式表单,我们可以定义一个方法,控件数据进行校验,之后将方法作为参数添加到控件定义处即可

18.9K20

Angular Material 设计之美

但是在编写 ng-matero 过程,随着 Angular Material 深入了解,我发现这种说法稍显狭隘甚至产生了一定误导,所以我希望这篇文章可以让大家 Angular Material...接下来我会从相对宏观角度介绍 Angular Material 设计一些亮点,并且简单介绍 Angular Material 一些使用技巧。...顺便插一句,如果大家纠结用 Sass 还是 Less,可以看一下这篇文章 CSS 预处理器循环,个人不建议用 Less,请原谅我无意战?。...少即是多 Less is more(少即是多)—— 密斯·凡德罗 我想很多人 Angular Material 望而却步原因之一就是它组件看上去有点少。然而在一般业务这些组件已经够用。...changeOptions()" [disabled]="options.disabled">visible Angular Material 表单组件更像是原生

5K30

Angular 6.x 表单快速入门

Angular 中有两种表单: Template Driven Forms - 模板驱动式表单 (类似于 AngularJS 1.x 表单 ) Reactive Forms - 响应式表单 Template...比较灵活 适用于复杂场景 简化了HTML模板代码,把验证逻辑抽离到组件类 手动创建 Form Model (同步) 方便跟踪表单控件值变化 易于动态添加表单控件 易于单元测试 本文主要介绍...第一节 - 创建最简单输入框 如何实现双向绑定? 在 Angular 表单,我们通过 ngModel 指令来实现双向绑定。...在 Angular ,我们可以使用熟悉 标签来创建表单。...比如联系人信息包括姓名及住址,现在需姓名和住址进行精细化信息收集,姓名可精细化成姓和名字,地址可精细化成城市、区、街等。

4.6K20

Ionic3 表单处理

在项目中,可以使用angular @angular/forms模块处理表单,但是并不需要在app.module引用@angular/forms模块,因为在app.module已经引入了@angular...使用过程 从@angular/forms引入需要用到内容 import {FormBuilder, Validators, FormGroup} from '@angular/forms'; 对应表单初始化如下...:formBuilder.group字段就是form表单对应字段,Validators 用于校验,规则根据实际情况配置。...params).then(result => { //xxx }).catch(error => { //xxx }); } ngSubmit 是一个@output属性,将表单值以键值方式组装成一个对象返回...info}} 当校验不通过时候,就会在这个div上显示 在 login.ts 定义 提示信息。 以下是测试结果,仔细看 ?

1.3K10

Angular 6.x 快速入门

name = 'Angular'; } 定义数据接口 在 TypeScript 接口是一个非常灵活概念,除了可用于一部分行为进行抽象外,也可用于「对象形状(Shape)」进行描述...基础知识 ngIf 指令简介 该指令用于根据表达式值,动态控制模板内容显示与隐藏。它与 AngularJS 1.x ng-if 指令功能是等价。...ngIf 指令语法 ... ngFor 指令简介 该指令用于基于可迭代对象每一项创建相应模板。...1.x 表单 ) Reactive Forms - 响应式表单 本小节主要介绍模板驱动式表单,接下来我们来演示如何通过表单来为我们之前创建 UserComponent 组件,增加让用户自定义技能功能...反之,我们路径将在 URL 地址栏显示,随后进行后续视图更新,以匹配 routerLink 设置值。

14.1K20

AngularDart4.0 指南- 模板语法二 顶

当指令没有合适宿主元素时如何元素进行分组。 如何编写自己结构指令。 为什么你只能应用一个结构指令到一个元素。 本节介绍常见结构指令: NgIf:有条件地从DOM添加或删除元素。...NgFor:为列表每个项目重复一个模板。 NgSwitch:只显示多个可能元素一个。 NgIf  您可以通过向该元素应用NgIf指令(称为宿主元素)来添加或移除DOM元素。...*ngFor和trackBy NgFor指令可能表现不佳,特别是在大型列表一个项目,删除项目或添加项目的小改动可以触发DOM操作级联。...以下是Forms指南中表单示例简化版本。...heroForm值是什么? heroForm是一个Angular NgForm指令引用,可以跟踪表单每个控件值和有效性。 原生元素没有form属性。

29.9K20

Angular 2 + 折腾记 :(7) 初步了解表单:模板驱动及数据驱动及脱坑要点

前言 表单在整个系统作用相当重要,这里主要扯下响应表单实现方式。...模板驱动表单依赖FormsModule,数据驱动表单依赖FormsModule,ReactiveFormsModule 一般做表单校验及操作推荐用数据驱动方式,好维护和理解。。...---- 模板驱动 模板驱动:主要是依赖[(ngModel)]和#scope_var以及原生表单控件属性(require,minlenght,maxlength等)来操作表单值亦或者校验 一个最简单例子...--testform这个局部变量保存了表单所有相关信息--> <!...; 在Submit()函数内,在点击提交时候整个表单一一去判断,传统方式基本这样 每个控件输入时候对应去触发对应事件做校验,比如[ngModelChange]来处理双向绑定值校验 ---- 数据驱动

3.8K20

Angular开发实践(七): 跨平台操作DOM及渲染器Renderer2

通过合适方法,使用 Angular 构建应用,可复用在多种不同平台应用上 —— Web、移动 Web、移动应用、原生应用和桌面原生应用。...通过Renderer2设置divcss样式background-color } } 获取组件div 在Angular应用不应该通过原生 API 或者 jQuery 来直接获取DOM元素...console.log('DIVid:' + this.demoDiv.nativeElement.id); // DIVid:demoDiv } 在组件类,我们通过 @ViewChild 获取到包装有...操作组件div 在上面通过几种方式获取到 div DOM 对象,那么我们要如果它进行操作呢(设置样式、属性、插入子元素等)?通过原始API 或者 jQuery 肯定是不允许了。...这样我们就引出Angular抽象类 Renderer2 来元素进行设置样式、属性、插入子元素等操作。

2.6K90
领券