我正在写一个Angular应用程序,{{myVal}}
我想要显示一个响应.
我怎么做?如果我只是使用绑定语法,innerHTML
它会编码所有div
字符(当然).
我需要以某种方式将a的内部html绑定{{myVal}}
到变量值.
请向我解释为什么我一直收到这个错误: ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked.
显然,我只是在开发模式下获得它,它不会在我的生产版本中发生,但它非常烦人,而我根本不理解在我的开发环境中出现错误的好处 - 不会出现在prod上 - - 可能是因为我缺乏理解.
通常,修复很容易,我只是将错误导致代码包装在setTimeout中,如下所示:
setTimeout(()=> {
this.isLoading = true;
}, 0);
Run Code Online (Sandbox Code Playgroud)
或者使用如下构造函数强制检测更改constructor(private cd: ChangeDetectorRef) {}
::
this.isLoading = true;
this.cd.detectChanges();
Run Code Online (Sandbox Code Playgroud)
但为什么我经常遇到这个错误?我想了解它,以便将来可以避免这些hacky修复.
抱歉,如果问题太基本。
我想知道是否应该避免在系统中进行双向数据绑定。我可以在提交表单时捕获表单的值,而无需使用两种方式的数据绑定。
我的问题是双向数据绑定是否实际上消耗了太多内存。我应该停止使用它吗?
对不起基本问题,我试图用基本的例子来理解angular2流.
import { Component } from '@angular/core';
@Component({
selector:'my-app',
template:'Test {{ getVal() }}'
})
export class AppComponent{
getVal():void{
console.log("demo text")
}
}
Run Code Online (Sandbox Code Playgroud)
运行此示例后,"演示文本"在控制台中可见4次,为什么会这样?谢谢.
说,我有一个组件,其用法如下:
<health-renderer
[health]="getHealth()"
[label]="label">
<health-renderer>
Run Code Online (Sandbox Code Playgroud)
从https://angular.io/guide/template-syntax读取与数据绑定相关的部分后,似乎我设置目标组件属性的方式health
是错误的,因为所使用的模板表达式getHealth()
是一种方法。方法绑定应该仅通过事件完成,而不是属性。换句话说,模板表达式(位于右侧的东西=
)必须是模板变量,模板引用变量或组件/指令/元素属性。
如果[target]="methodCall()"
做绑定的方法错误,那么为什么Angular会允许呢?如果这是进行绑定的正确方法,那么我在上一段中给出的理解是错误的吗?
另外,我该如何修改代码以反映以下方面的正确内容:
getHealth(): integer
,其中包含用于计算运行状况的业务逻辑。0不会在健康进度条上显示任何内容。100将填满进度条。最后,我注意到每次鼠标移动或单击时,getHealth()都会被无故调用10-20次。由于Angular的这种变化检测行为,将方法绑定到目标属性可能不是一个好习惯吗?
我在子组件中有这个属性:
@Input() submitButtonDisabled: boolean;
Run Code Online (Sandbox Code Playgroud)
在我的父组件的模板中,我使用插值通过属性绑定设置它:
<my-child-component
[submitButtonDisabled]="{{disableSubmitButton()}}">
</my-child-component>
Run Code Online (Sandbox Code Playgroud)
子组件模板以submitButtonDisabled
这种方式读取其
属性:
<button id="btSubmit" type="submit" (click)="submit()"
[disabled]="submitButtonDisabled">Ok</button>
Run Code Online (Sandbox Code Playgroud)
调试我的打字稿代码我看到属性绑定工作正常,但无论如何,提交按钮都会被禁用 disableSubmitButton
返回(布尔值).似乎组件在绑定发生之前呈现.
这有意义吗?我的错误在哪里?
我正在尝试创建以下UI/UX按钮:
.. [2015] [2016] [2017]
默认情况下,当前年份(在撰写时,2017年)被"选中",当用户点击"2015"时,应取消选择"2017"和"2016"(这些按钮是"互斥的")
这些按钮是从外部数据源生成的,该数据源为我提供了多年的数据:
<button *ngFor="let year of styles.years" type="button" name="button" class="btn btn-default" id="{{year.year}}">
{{year.year}}
</button>
Run Code Online (Sandbox Code Playgroud)
如何创建一个按钮系统,其中一个按钮被"自动选择",当选择"其他"按钮时,它会取消选择主动选择的按钮,并将现在单击的按钮设置为"已选择"?
我的里面有这个app/component.ts
import { Component } from '@angular/core';
@Component({
selector: 'app-root',
template: `
<ul>
<li *ngFor="let course of courses">
{{ course }}
</li>
</ul>
`,
styleUrls: ['./app.component.css']
})
export class AppComponent {
course = ['Course 1', 'Course 2', 'Course 3'];
}
Run Code Online (Sandbox Code Playgroud)
在我的 app.module.ts 中,我还导入了必要的东西
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common'
import { AppComponent } from './app.component';
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
CommonModule
],
providers: [], …
Run Code Online (Sandbox Code Playgroud)