我有一个 forEach 循环,用于在将数据推送到数组之前检查是否存在条件:
allow(id, perm, arr) {
const data = { "userId": id, "permissionId": perm };
arr.forEach(key => {
if (id !== key.userId) {
throw new Error('id does not exists');
} else {
if (perm === key.permissionId) {
throw new Error('perm exists in this id');
} else {
arr.push(data);
}
}
});
}
Run Code Online (Sandbox Code Playgroud)
原来的数组arr是这样的:
[{"userId": 1,"permissionId": 1},
{"userId": 2,"permissionId": 1},
{"userId": 3,"permissionId": 0},
{"userId": 4,"permissionId": 0}]
Run Code Online (Sandbox Code Playgroud)
如果我使用console.log()所有作品,但是当我抛出错误时,执行会停止,但是如何在不停止循环的情况下管理异常?
我正在使用数据服务将用户数据发送到应用程序,并在标题组件中显示用户名。如果我使用登录组件登录我的应用程序,则正确显示了用户名,但是当我重新加载页面时,用户数据消失了。
登录时重新加载之前
重装后
用户数据来自使用BehaviorSubject的数据服务:
数据服务
export class DataService {
private userSource = new BehaviorSubject({});
currentUser = this.userSource.asObservable().pipe(distinctUntilChanged());
constructor(private injector: Injector, private api: UtentiApiService) { }
getUser() {
return this.currentUser;
}
getUserFromToken() {
const authService = this.injector.get(AuthService);
const token = authService.getToken();
const userIdToken = jwt_decode(token);
// console.log(userIdToken);
return this.api.getUtente(userIdToken.userId);
}
getPermissionsFromToken(): Observable<any> {
const authService = this.injector.get(AuthService);
const token = authService.getToken();
const userIdToken = jwt_decode(token);
return of(userIdToken.permArr);
}
changeUser(user: object) {
this.userSource.next(user);
}
}
Run Code Online (Sandbox Code Playgroud)
在标头组件中,我使用该服务:
header.component.ts
export class HeaderComponent implements OnInit …Run Code Online (Sandbox Code Playgroud) 我在从 docker 容器连接本地 mysql 数据库时遇到问题。我在容器中使用 docker-compose 和两个服务,数据库不在容器上
我有这个 docker-compose 文件:
version: '2'
services:
web:
build:
context: ./
dockerfile: web-dev.dockerfile
volumes:
- ./:/var/www
ports:
- "8080:80"
links:
- app
network_mode: "bridge"
dns:
- 10.0.50.6
app:
build:
context: ./
dockerfile: app-dev.dockerfile
volumes:
- ./:/var/www
network_mode: "bridge"
dns:
- 10.0.50.6
Run Code Online (Sandbox Code Playgroud)
该web容器与此Dockerfile Nginx上的服务:
FROM nginx:1.10
ADD ./vhost.dev.conf /etc/nginx/conf.d/default.conf
WORKDIR /var/www
Run Code Online (Sandbox Code Playgroud)
和这个配置文件:
server {
listen 80;
index index.php index.html;
root /var/www/formapp/public;
location / {
try_files $uri /index.php?$args;
}
location ~ \.php$ {
fastcgi_split_path_info …Run Code Online (Sandbox Code Playgroud) 我有一个简单的用户和发布模型的应用程序,
var mongoose = require("mongoose");
mongoose.connect("mongodb://localhost/assoc", {useMongoClient:true});
mongoose.Promise = global.Promise;
//Post
var postSchema = new mongoose.Schema({
title: String,
content: String
});
var Post = mongoose.model("Post", postSchema);
//User
var userSchema = new mongoose.Schema({
email: String,
name: String,
posts: [postSchema]
});
var User = mongoose.model("User", userSchema);
Run Code Online (Sandbox Code Playgroud)
我之前创建了一个用户(名称:"gino")并将帖子推送到:
// var newUser = new User({
// email: "a.b@c.it",
// name: "gino"
// });
//
// newUser.posts.push({
// title: "gino's post",
// content: "this is content"
// });
//
// newUser.save(function (err, user) {
// …Run Code Online (Sandbox Code Playgroud) 假设我有两个类型对象数组(相同类型),我想合并它们,检查一个对象是否已经存在,然后将旧的和新的数量相加并返回一个具有更新值的新数组
型号:
class Ingredient {
constructor(public name: string, public amount: number){ }
}
Run Code Online (Sandbox Code Playgroud)
数组:
private ingredients: Ingredient[] = [
new Ingredient('farina', 500),
new Ingredient('burro', 80),
new Ingredient('uccellini', 5)
];
private newIngredients: Ingredient[] = [
new Ingredient('uova', 5),
new Ingredient('pancetta', 80),
new Ingredient('uccellini', 8)
];
Run Code Online (Sandbox Code Playgroud)
当我尝试创建一个方法来检查和合并数组时,我在开始编写代码之前记录了一个错误!:
addIngredients(newIngredients: Ingredient[]) {
this.ingredients
.concat(this.newIngredients)
.reduce((result, curr) => {
});
}
Run Code Online (Sandbox Code Playgroud)
这是错误:
error TS2345: Argument of type '(result: Ingredient, curr: Ingredient) =>
void' is not assignable to parameter of …Run Code Online (Sandbox Code Playgroud) 我有一个带有可扩展行的材质表(https://material.angular.io/components/table/examples),并且我想管理表本身的删除,因此我创建了一个带有触发删除事件的函数的删除按钮。api有效,记录被正确删除,但删除后表没有刷新,我想实现这种行为。这里有一个带有假 API 的 stackblitz:https ://stackblitz.com/edit/angular-comzph
我尝试在删除函数中调用 ngOnInt 并导航回同一路线,但没有任何反应......
deleteCustomer(id) {
this.api.deleteCustomer(id)
.subscribe(res => {
alert(`cliente rimosso`);
// TODO fix reload list after delete
// this.router.navigate['/clienti'];
this.ngOnInit();
}, (err) => {
console.log(err);
}
);
}
Run Code Online (Sandbox Code Playgroud)
我也尝试使用这个解决方案,但不起作用。我尝试使用 ngOnChange 和 ngOnDestroy,但也不起作用......
有人可以帮助我吗?
我有一个应用程序,文件中有多个材质主题theme.scss:
// Light theme
$light-primary: mat-palette($mat-grey, 200, 500, 300);
$light-accent: mat-palette($mat-brown, 100);
$light-warn: mat-palette($mat-deep-orange, 200);
$light-theme: mat-light-theme($light-primary, $light-accent, $light-warn);
.light-theme {
@include angular-material-theme($light-theme)
}
// Red theme
$red-primary: mat-palette($mat-red, 700, 500, 300);
$red-accent: mat-palette($mat-amber, 200);
$red-warn: mat-palette($mat-brown, 200);
$red-theme: mat-light-theme($red-primary, $red-accent, $red-warn);
.red-theme {
@include angular-material-theme($red-theme)
}
Run Code Online (Sandbox Code Playgroud)
如果我想更改应用程序的主题,我可以通过切换现有主题来实现。现在我想添加一个功能,让用户使用颜色选择器创建自定义主题,在应用程序中设置 $primary、$accent 和 $warn 颜色,然后在数据库中发布新创建的样式。
我正在使用ngx-color-picker设置颜色,但我不知道如何设置自定义主题并在用户访问时使用它。
我正在使用 Angular 6 和材质 2
感谢帮助