模板检查不 happening/Change 检测器不 运行 (Angular)

Template Check not happening/Change detector not running (Angular)

出于某种原因,变更检测不在我的 Angular 模板中 运行。我正在尝试根据第二个 div(textbox) 中的文本更改来更改第一个 div 的颜色。代码如下所示:

<div [ngStyle]="{'background-color': titleText.innerText? 'red' : 'blue' }">Title</div>
<div style="border:1px solid black" contenteditable="true" aria-multiline="true" role="textbox" ngDefaultControl #titleText></div>

在运行时,当我在文本框中输入一些文本时,第一个 div 的颜色没有变为红色。但是,在编译之前,如果我将一些文本传递给 div,那么在运行时会显示红色,再次从文本框中删除文本不会改变颜色。我觉得模板检查没有发生。

这是回购的 link:https://github.com/enzup/dummy/blob/master/src/app/app.component.html

我在 tsconfig.json 中的 'angularCompilerOptions' 下将 'fullTemplateTypeCheck' 设置为 true,尝试安装多个项目,使用不同的 angular 版本(8,9,10,11 ) 但其中 none 似乎有效。但是尝试在 ngAfterViewInIt() 中取消注释 app.component.ts 文件中的代码,并且第一个 div 开始根据第二个 div 中的文本更改更改其颜色就好了,除了每 5000 毫秒触发一次更改(这是在 setInterval() 中传递的时间)。也许变化检测强制模板检查?

这是我从 stackblitz 克隆的另一个回购协议:https://github.com/enzup/angular-ivy-oghnan/blob/master/src/app/app.component.html

模板与第一个 repo 中的相同。但这里一切正常。我不确定为什么会这样。我比较了两个回购协议,它们的 tsconfig.json、angular.json、package.json,但没有任何问题或不同。请帮助我理解为什么第一个 repo 没有产生预期的结果而第二个 repo 却完美无缺。

PS。我知道有一些变通方法可以更改 div 的背景颜色,而不是我目前正在尝试遵循的颜色,但这不是我想要的,ngClass 也不起作用(在第一个回购协议中只是,在第二个它再次工作正常)。我想了解为什么第一个回购行为不稳定,而第二个则不然。

您忘记在 app.module 中导入 FormsModule。 顺便说一下,您确定您理解自定义 controlValueAccessors,因为您似乎已经使用过 ngDefaultControl。 我建议您阅读为什么需要 controlValue 访问器。 此外,模板类型检查与更改检测无关(它仅用于类型检查您的 html 绑定。)