我正在尝试用 Angular 的新takeUntilDestroyed()
.
但我一开始就犯了错误。
\n\n\nNG0203:takeUntilDestroyed() 只能在注入上下文中使用,例如构造函数、工厂函数、字段初始值设定项或与
\nrunInInjectionContext
. 欲了解更多信息,请访问https://angular.io/errors/NG0203
博客文章说:
\n\n\n默认情况下,该运算符将注入当前的清理上下文。例如,在组件中使用,它将使用组件\xe2\x80\x99s的生命周期。
\n
文档确认注入上下文是可选的。这篇深入的文章展示了它在OnInit
没有上下文的情况下的用法。\n这就是我如何使用它。
public ngOnInit(): void {\n this.route.firstChild.paramMap.pipe(\n takeUntilDestroyed()\n ).subscribe((res: ParamMap) => {\n ...\n });\n
Run Code Online (Sandbox Code Playgroud)\n如何解决这个问题?
\n我想更多地了解如何在HTML中使用data-*属性及其在jQuery中的使用.我只是尝试使用.data()和/或.attr()检索data-attribute-name ="a value" ,它们都使用以下方法记录为"undefined".如何使用data-属性通过jQuery传递值?
HTML
<li class="als-item">
<a data-loc-subject="test value">
<img src="clock.png"/>
</a>Beach
</li>
Run Code Online (Sandbox Code Playgroud)
JS
$( ".als-item" ).click(function(e) {
e.preventDefault();
var data = $('.als-item').data('data-loc-subject');
var attrmethod = $('.als-item').attr('data-loc-subject');
console.log(data);
console.log(attrmethod);
});
Run Code Online (Sandbox Code Playgroud)
我知道如何使用每个浏览器指定的伪类在浏览器中设置占位符文本/背景/字体大小等CSS的样式.但是我无法使用开发工具在浏览器中设置它们的样式,并且没有找到答案是否可能.
我喜欢使用占位符样式而不需要试错工作流程.
我已经使用ControlValueAccessor构建了一个自定义输入组件,并且可以很好地将标签添加为选择。(Stackblitz)
我的问题是:
这是提交角度形式后的两个相同组件值的屏幕截图。一个是对象数组(预期),另一个是实际的FormArray对象,其中.value属性包含对象数组!
如果您不想访问StackBlitz,这是一些工作原理代码。
自定义控件是这样实现的。
this.form = this.fb.group({
tags: this.fb.array([])
});
Run Code Online (Sandbox Code Playgroud)
当用户选择一个下拉项目或点击时,将按以下方式保存对象:
get tagsArray(): FormArray { return this.form.get('tags') as FormArray; }
...
this.tagsArray.push(new FormControl(value));
this.onChange(this.tagsArray); // update controller value
Run Code Online (Sandbox Code Playgroud)
您可以像这样在我的StackBlitz中的formGroup中实现该组件(也在我的StackBlitz中):
表格初始化
public form: FormGroup = this.fb.group({
states: [],
cities: []
});
Run Code Online (Sandbox Code Playgroud)
模板
<input-tags formControlName="cities" label="Cities" [typeAhead]="cities" [displayKeys]="['name']" filterKeys="['name']"></input-tags>
<input-tags formControlName="states" label="States" [typeAhead]="states" [displayKeys]="['name']" filterKeys="['name']"></input-tags>
Run Code Online (Sandbox Code Playgroud)
但问题是:
Angular的FormArray什么时候是传统数组,什么时候像Object一样的FormArray Array?
我在加载和实例化 Angular 模块方面进行了大量工作。(不带路由器)
但现在,在 Angular 13 中,我发现实例化 NgModule 的常用编译器工具已被弃用:
这是我加载模块的常用代码
const moduleFactory = await this.compiler.compileModuleAsync(module);
const moduleRef = moduleFactory.create(this.injector);
const componentFactory = moduleRef.instance.resolveComponent(selector);
Run Code Online (Sandbox Code Playgroud)
更深入地了解 ViewContainerRef 现在包含工厂的 V13 更改使动态组件变得更容易了 1 步。然而,关于ViewContainerRef.createComponent()文档指出:
已弃用的 Angular 不再需要组件工厂来动态创建组件。使用不同的 createComponent 方法签名,允许直接传递 Component 类。
那么 Angular 13+ 中这些任务的新方向是什么?
我无法理解如何防止srcset
在屏幕上加载任何图像< 768px
.
我已经尝试了下面的代码,但尺寸属性似乎没有你想到的.以下加载1024.jpg
所有屏幕尺寸:
<img
src="default.jpg"
srcset="img/1024.jpg 1024w"
sizes="(min-width: 768px) 768px, 100vw"
/>
Run Code Online (Sandbox Code Playgroud)
或者是图片元素,如果它会尊重空的srcset,但它只是"暗示"浏览器应该加载哪个图像.
使用双向数据绑定时,似乎没有办法观察父组件的变化。
我有一个用于收集标签列表的自定义输入组件。双向数据绑定在此组件与其父组件之间设置和工作。
// the parent component is just a form
// here is how I'm adding the child component
<input-tags formControlName="skillField" [(tags)]='skillTags' (ngModelChange)="skillTagUpdate($event)">
</input-tags>
Run Code Online (Sandbox Code Playgroud)
在父组件中,如何观察绑定变量的变化?虽然它总是最新的(我已经确认了这一点),但我找不到任何关于对变化做出反应的指导。
我试过了:
ngOnChanges(changes: SimpleChanges) {
if (changes['skillTags']) {
console.log(this.skillTags); // nothing
}
}
Run Code Online (Sandbox Code Playgroud)
和
skillTagUpdate(event){
console.log(event); // nothing
}
Run Code Online (Sandbox Code Playgroud)
更新: TWDB 恕我直言不是它所宣传的那样。每当我到达 TWDB 似乎是一个解决方案的地方时,我都会重新设计服务和/或可观察的通信。
我在使用表单构建 queryParams 对象后进行导航:
options {
...
words: (4) ["chuck", "norris", "vs", "keanu", "reeves"]
}
Run Code Online (Sandbox Code Playgroud)
然后navigate
使用该对象更新 URL 的参数:
this.router.navigate(['/search'], { queryParams: options });
Run Code Online (Sandbox Code Playgroud)
每个条目的URLwords
参数都是重复的,如下所示:
/search?words=chuck&words=norris&words=vs&words=keanu&words=reeves
Run Code Online (Sandbox Code Playgroud)
我们如何正确地传入一个数组queryParams
?
链接: angular.io/api/router/Router#navigate alligator.io/angular/query-parameters
queryParamsHandling 对此没有影响。这是StackBlitz 的重现。
angular ×5
html5 ×2
css ×1
css3 ×1
eventemitter ×1
formarray ×1
forms ×1
google-maps ×1
html ×1
html-email ×1
iframe ×1
image ×1
javascript ×1
jquery ×1
lazy-loading ×1
php ×1
placeholder ×1
query-string ×1
rxjs ×1
src ×1
srcset ×1
textfield ×1