似乎在'setTimeout'函数中更改组件的属性对初始页面加载不起作用。
假设我有一个带有属性的组件'HomeComponent':
isValueTrue: boolean = false;
如果我使用数据绑定将此属性应用于HTML元素:
<div [class.myClass]="isValueTrue"></div>
并在我的ngOnInit()类中设置值,如:
this.isValueTrue = true;
有效!
但是,如果我这样申请:
let comp = this;
setTimeout(() => comp.isValueTrue = true, 1000);
它不会在初始页面加载时设置。然而,它将在后续页面访问中起作用,但在硬刷新后不会起作用。
我不知道为什么这不起作用,但我希望它是在最新版本中修复的东西。我的项目目前正在使用RC 5,所以我现在正升级到2.0.0(2016-09-14)。
为什么会这样?它是否在最近的版本中修复了?
答案 0 :(得分:1)
它正在发挥作用。我无法清楚地说出RC5是否有错误。
看看这个plunker:https://plnkr.co/edit/KOmn62IJJyr2jzt6hYh1?p=preview
import {Component, NgModule} from '@angular/core'
import {BrowserModule} from '@angular/platform-browser'
@Component({
selector: 'my-app',
template: `
<div>
<h2 [class.red]="useRed">Hello {{name}}</h2>
</div>
`,
styles: [
'.red { color: red; }'
]
})
export class App {
useRed = false;
constructor() {
this.name = 'Angular2'
}
ngOnInit() {
setTimeout(() => this.useRed = true, 1000);
}
}
@NgModule({
imports: [ BrowserModule ],
declarations: [ App ],
bootstrap: [ App ]
})
export class AppModule {}
如果您使用此() =>
语法,则无需保存this
!
只有在使用this
语法时,function () {}
上下文才会丢失。
答案 1 :(得分:0)
实际上,您可以执行此操作,并且它可以在角度9中工作
grammar aidl;
//parser
//file
file : packageDeclaration* importDeclaration* parcelableDeclaration? interfaceDeclaration? ;
//packageDeclaration
packageDeclaration :'package' packageName ';';
packageName : Identifier
|
packageName '.' Identifier;
// importDeclaration
importDeclaration
: 'import' importName ';'
;
importName : Identifier
|
importName '.' Identifier;
//parcelableDeclaration
parcelableDeclaration : 'parcelable' parcelableName ';' ;
parcelableName : Identifier ;
//interfaceDeclaration
interfaceDeclaration : interfaceTag? 'interface' interfaceName '{' methodsDeclaration+ '}' ;
interfaceTag : 'oneway' ;
interfaceName : Identifier ;
// methodsDeclaration
methodsDeclaration : methodTag? returnType methodName '(' parameters? ')' ';' ;
methodName : Identifier ;
methodTag: 'oneway';
returnType : type ;
// parameters
parameters
: parameter (',' parameter)*
;
parameter
: parameterTag? parameterType parameterName ;
parameterType : type ;
parameterName : Identifier;
parameterTag : 'in' | 'out' | 'inout' ;
// type
type :
primitiveType
| referencedType
| arrayType
| listType
| mapType
| 'void'
;
primitiveType :
'byte'
| 'short'
| 'int'
| 'long'
| 'char'
| 'float'
| 'double'
| 'boolean'
;
referencedType :
'String'
| 'CharSequence'
| selfdefineType
;
selfdefineType : Identifier;
arrayType : primitiveType dims
| referencedType dims
;
listType : 'List' ('<' (primitiveType | referencedType) (',' (primitiveType | referencedType))* '>')?;
mapType : 'Map' ('<' (primitiveType | referencedType) (',' (primitiveType | referencedType))* '>')?;
dims
: '[' ']' ( '[' ']')*
;
//Lexer
// Identifier
Identifier
: JavaLetter JavaLetterOrDigit*
;
fragment
JavaLetter
: [a-zA-Z$_] // these are the "java letters" below 0x7F
| // covers all characters above 0x7F which are not a surrogate
~[\u0000-\u007F\uD800-\uDBFF]
{Character.isJavaIdentifierStart(_input.LA(-1))}?
| // covers UTF-16 surrogate pairs encodings for U+10000 to U+10FFFF
[\uD800-\uDBFF] [\uDC00-\uDFFF]
{Character.isJavaIdentifierStart(Character.toCodePoint((char)_input.LA(-2), (char)_input.LA(-1)))}?
;
fragment
JavaLetterOrDigit
: [a-zA-Z0-9$_] // these are the "java letters or digits" below 0x7F
| // covers all characters above 0x7F which are not a surrogate
~[\u0000-\u007F\uD800-\uDBFF]
{Character.isJavaIdentifierPart(_input.LA(-1))}?
| // covers UTF-16 surrogate pairs encodings for U+10000 to U+10FFFF
[\uD800-\uDBFF] [\uDC00-\uDFFF]
{Character.isJavaIdentifierPart(Character.toCodePoint((char)_input.LA(-2), (char)_input.LA(-1)))}?
;
WS : [ \t\r\n\u000C]+ -> skip
;