我试图实现自定义验证器.非异步one(cannotContainSpaces)工作得很好.async one(shouldBeUnique),是的,目前是微不足道的,应该按照我的理解返回promise,Validator对象应该解析.它没有.formControl上的错误集合在username控制台中显示:
{__zone_symbol__state: null, __zone_symbol__value: Array(0)}
Run Code Online (Sandbox Code Playgroud)
表单组件:
import { CustomValidators } from './custom.validators';
import { Component, Input } from '@angular/core';
import { FormGroup, FormControl, Validators } from '@angular/forms';
@Component({
selector: 'signup-form',
templateUrl: './signup-form.component.html',
styleUrls: ['./signup-form.component.css']
})
export class SignupFormComponent {
form = new FormGroup({
username: new FormControl('', [
CustomValidators.cannotContainSpaces,
CustomValidators.shouldBeUnique
// Validators.email,
]),
password: new FormControl('', Validators.required)
})
get username() {
return this.form.get('username');
}
keyPressed(){
console.log(this.username.errors)
}
}
Run Code Online (Sandbox Code Playgroud)
自定义验证方法:
import { AbstractControl, ValidationErrors } …Run Code Online (Sandbox Code Playgroud) 问题已得到解答,但我正在寻找一个,嗯,更直接的问题.看起来奇怪的是,我们必须实现一个而不是两个映射才能访问对象键.
基本firebase db:
可以看出,课程对象显然有键.加价:
<ul>
<li *ngFor="let course of courses$ | async">
<b>Key:</b> {{course.$key}} <!-- doesn't show --!>
<b>Title:</b> {{course.Title}}
<b>Duration:</b> {{course.Duration}}
<b>Author:</b> {{course.Author}}
<p><button (click)="deleteCourse(course)">Remove</button></p>
<hr>
</li>
</ul>
Run Code Online (Sandbox Code Playgroud)
现在,这些课程显示得很好,但我不知道如何获取对该键的引用以便删除它.(或者我可能没有在我的firebaseDatabase对象上使用正确的方法).无论哪种方式,当我在控制台中记录密钥时,它显示为未定义.
export class AppComponent {
courses;
courses$: AngularFireList<any>;
constructor(private db: AngularFireDatabase) {
this.courses = db.list('/courses');
this.courses$ = this.courses.valueChanges();
}
...
deleteCourse(course) {
console.log(course.$key); // -> undefined
this.db.object('/courses/' + course.$key).remove();
}
}
Run Code Online (Sandbox Code Playgroud) 我正在使用 VS Code 并遵循 ASP.NET Core/EF Core 教程,并承认我不太清楚 async、await 和 Task 是如何工作的(嗯,我知道前两个,但不知道第三个。)我第一次实现一个存储库,以及与之配套的 UnitofWork 类和接口。这是工作单元类:
using System.Threading.Tasks;
namespace vega.Persistence
{
public class UnitOfWork : IUnitOfWork
{
private readonly VegaDbContext context;
public UnitOfWork(VegaDbContext context)
{
this.context = context;
}
public async Task CompleteAsync()
{
await context.SaveChangesAsync();
}
}
}
Run Code Online (Sandbox Code Playgroud)
当我将鼠标悬停在 CompleteAsync 操作名称上时,除了 VS-Code 智能感知显示的主题行错误之外,我还得到以下信息:
'UnitOfWork.CompleteAsync()': not all code paths return a value [AppName]
Run Code Online (Sandbox Code Playgroud)
其他可能相关的片段:
using System;
using System.Threading.Tasks;
namespace vega.Persistence
{
public interface IUnitOfWork
{
Task CompleteAsync();
}
}
Run Code Online (Sandbox Code Playgroud)
在我的 Startup.cs 中: …
我的 MVC5 项目视图对 api/movies 进行 api 调用,其中存在以下逻辑:
(首先,这是 movieDto 的实例化方式):
var moviesQuery = _context.Movies.Include(m => m.Genre);
var moviesDto = moviesQuery.ToList()
.Select(Mapper.Map<Movie, MovieDto>);
Run Code Online (Sandbox Code Playgroud)
逻辑如下:
//for regular API call add N/A to items that are not available
foreach (MovieDto movie in moviesDto)
{
if (movie.NumberAvailable == 0)
movie.Name = movie.Name + " N/A. :(";
}
return Ok(moviesDto);
Run Code Online (Sandbox Code Playgroud)
我在运行时在调试模式下的 Foreach 循环中检查电影对象,确实发现某些电影的 name 属性附加了“N/A :(”。但在视图中,只有电影的 (原始)名称出现。
编辑:在返回给调用者之前检查上面最后一行的 movieDto 时,我发现相关电影的名称尚未更新。
FWIW,这是 movieDto 类定义:
public class MovieDto
{
public int Id { get; set; }
[Required] …Run Code Online (Sandbox Code Playgroud) JavaScriptArray.every()没有按我预期的方式工作
我的任务是在不使用 regex 的情况下编写GUID有效性的基本检查。所以我所做的就是检查 guid 字符串中的非破折号字符是否是十六进制数字。
const isValidGUIDChar = (char) => !isNaN(+char) || "abcdef".includes(char.toLowerCase());
// let guid = "123";
// let guid = "abc"
let guid = "abc123";
let isGuidValid = guid.replaceAll('-', '').length === 32 && guid.split().every(isValidGUIDChar);
console.log(isGuidValid); // returns true for either 'abc' or '123' but false for 'abc123'
Run Code Online (Sandbox Code Playgroud)
上面评论中提到的结果是违反直觉的。该every()方法似乎评估为:
“ (每个字符必须是数字),或(每个字符必须来自 'abcdef') ”,
而我需要的,以及看起来直观的,是让它评估:
“ (每个字符)必须(可以是‘abcdef’中的数字) ”
我怎样才能实现后者?
我在CLI控制台中收到上述错误,即使Post已被定义为接口/类型:user.component.ts:
import { Component } from '@angular/core';
import {PostService} from '../services/post.service';
@Component({
selector: 'user',
template: #`,
providers: [PostService],
})
export class UserComponent {
name: string;
email: string;
address: address;
hobbies: string[];
showhobbies: boolean;
posts: Post[];
` constructor(private postService: PostService) {
...
this.postService.getPosts().subscribe(posts => {
this.posts = posts;
console.log(posts);
});
}
}
interface Post{
id: number;
title: string;
body: string;
}
Run Code Online (Sandbox Code Playgroud)
post.service.js:
import {Injectable} from '@angular/core';
import {Http} from '@angular/http';
import 'rxjs/add/operator/map';
@Injectable()
export class PostService {
constructor(private http: Http){ …Run Code Online (Sandbox Code Playgroud) ...除了使用:
Array.Copy(originalArray, newArray)
制作原始版本的副本然后使用:
return Array.Sort (newArray)
获取排序的数组 - 当然不需要更改原始数组?
angular ×3
asp.net-mvc ×2
c# ×2
arrays ×1
async-await ×1
asynchronous ×1
ecmascript-6 ×1
firebase ×1
javascript ×1
promise ×1
sorting ×1
typescript ×1