切换到另一条路由时如何传输数据,以免重新加载?
我查看了NavigationExtras并没有找到任何合适的内容。充其量,您可以通过其queryParams属性传递一个 id以重新加载对象。
this.router.navigate(
[`/tickets/buy`],
{
queryParams: {
event: event.id
}
}
)
还有一个想法是做一个服务并通过它接收数据,但它似乎太拐杖了。
切换到另一条路由时如何传输数据,以免重新加载?
我查看了NavigationExtras并没有找到任何合适的内容。充其量,您可以通过其queryParams属性传递一个 id以重新加载对象。
this.router.navigate(
[`/tickets/buy`],
{
queryParams: {
event: event.id
}
}
)
还有一个想法是做一个服务并通过它接收数据,但它似乎太拐杖了。
该页面使用了Typehead
组件。
该组件中显示了一个数据数组:
[{id: 1, address: 'cat'}, {id: 2, address: 'dog'}]
列表中的数据按预期显示,但是如果单击列表项,则[object Object]显示在input中:

如何显示列表中选择的对象的地址?
但是,不要使用ng-template,因为我认为对于这样一个简单的任务来说它是多余的。
组件配置如下:
HTML:
<input
id="typeahead-focus"
type="text"
class="form-control"
[(ngModel)]="model"
[ngbTypeahead]="search"
(focus)="focus$.next($event.target.value)"
(click)="click$.next($event.target.value)"
[resultFormatter]="formatter"
#instance="ngbTypeahead"
/>
TS:
@Component({
selector: 'ct-typeahead',
templateUrl: './typeahead.component.html',
styleUrls: ['./typeahead.component.sass']
})
export class TypeaheadComponent implements OnInit {
model: any;
values: any[];
formatter = (result: any) => result.address;
constructor() {
this.values = [{id: 1, address: 'cat'}, {id: 2, address: 'dog'}]
}
ngOnInit() { }
@ViewChild('instance') instance: NgbTypeahead;
focus$ = new Subject<string>();
click$ = new Subject<string>();
search = (text$: Observable<string>) => {
const debouncedText$ = text$.pipe(debounceTime(200), distinctUntilChanged());
const clicksWithClosedPopup$ = this.click$.pipe(filter(() => !this.instance.isPopupOpen()));
const inputFocus$ = this.focus$;
return merge(debouncedText$, inputFocus$, clicksWithClosedPopup$).pipe(
map(term => (term === '' ? this.values
: this.values.filter(v => v.address.toLowerCase().indexOf(term.toLowerCase()) > -1)))
);
};
}
我创建了一个 Observable 并订阅了两次,但更新只针对最后一个订阅者:
import { Observable } from "rxjs";
let observer;
let source = Observable.create(obs => observer = obs);
source.subscribe(m => console.log(`subscribe 1: ${m}`));
source.subscribe(m => console.log(`subscribe 2: ${m}`));
observer.next("hello!:)");
我希望在控制台中看到:
subscribe 1: hello!:)
subscribe 2: hello!:)
但相反,我只收到最后一条消息:
subscribe 2: hello!:)
是否可以对一个活动进行多次订阅?
如果是,该怎么做?
Angular:7
有一个组件,我将实例FormGroup和字段名称传递给该组件。
如果该字段无效,则会显示错误。
您需要这样做,以便为每个验证显示不同的错误:
对于Validation.required:“必填字段”
对于Validation.email:“电子邮件无效”
等等
现在组件看起来像这样:
HTML
<div *ngIf="form.controls[fieldName].touched && form.controls[fieldName].invalid"
class="alert alert-danger mb-1" role="alert">
<div>
Invalid field
</div>
</div>
TS
import { Component, Input, OnInit } from '@angular/core';
import { FormGroup } from "@angular/forms";
@Component({
selector: 'cts-field-error',
templateUrl: './field-error.component.html',
styleUrls: ['./field-error.component.sass']
})
export class FieldErrorComponent implements OnInit {
@Input() form: FormGroup;
@Input() fieldName: string;
constructor() {}
ngOnInit() {}
}
Angular: 7
有进入应用程序的组件。我收到一个错误:
未捕获的错误:模板解析错误:无法绑定到“formGroup”,因为它不是“form”的已知属性。
HTML:
<form [formGroup]="loginForm" novalidate (ngSubmit)="authenticate()">
<div class="row m-1">
<div class="col-sm-3 col-md-2 col-lg-1">
<span>Email:</span>
</div>
<div class="col-sm-4">
<input class="form-control"
placeholder="Email"
formControlName="email"
name="email">
</div>
</div>
<div class="row m-1">
<div class="col-sm-3 col-md-2 col-lg-1">
<span>Password:</span>
</div>
<div class="col-sm-4">
<input class="form-control"
placeholder="Password"
formControlName="password"
name="password">
</div>
</div>
<div class="row m-1">
<div class="col">
<button class="btn btn-primary"
[disabled]="loginForm.invalid">
Log in
</button>
</div>
</div>
</form>
TS:
import { Component, OnInit } from '@angular/core';
import { AuthenticationService } from "../shared/authentication.service";
import { Router } from "@angular/router";
import { FormBuilder, FormGroup, Validators } from "@angular/forms";
@Component({
selector: 'cts-login',
templateUrl: './login.component.html',
styleUrls: ['./login.component.sass']
})
export class LoginComponent implements OnInit {
loginForm: FormGroup;
constructor(private authService: AuthenticationService,
private formBuilder: FormBuilder) {
this.loginForm = formBuilder.group({
email: ['', [Validators.required, Validators.email]],
password: ['', [Validators.required]]
})
}
ngOnInit() { }
authenticate() {
console.log(this.loginForm);
}
}
您需要将一个字符串传递给组件的Input参数,我发现是这样的:
<my-component [stringInput]="'Ivan'"></my-component>
如何做同样但不Ivan引用'?
postgres:9.6.3
表创建脚本:
CREATE TYPE "role_type_enum" AS ENUM('guest', 'user', 'admin', '0', '1', '2')
CREATE TABLE "role" ("id" SERIAL NOT NULL, "type" "role_type_enum" NOT NULL DEFAULT '[0]', "description" character varying NOT NULL, CONSTRAINT "PK_b36bcfe02fc8de3c57a8b2391c2" PRIMARY KEY ("id"))
我收到一个错误:
QueryFailedError:枚举 role_type_enum 的输入值无效:“[0]”
将“guest”指定为默认值的正确方法是什么?
为什么会发生此错误以及如何解决?
ERROR in ./src/index.ts
Module not found: Error: Can't resolve './test' in '/Users/maks/Documents/MyProgramms/TestProject/src'
@ ./src/index.ts 3:13-30
项目文件结构:
索引.ts
import { User } from './test';
let user = new User('ivan');
测试.ts
export class User {
name: string;
constructor(name:string) {
this.name = name;
}
}
包.json
{
"name": "testproject",
"version": "1.0.0",
"description": "",
"main": "src/index.ts",
"scripts": {
"build": "webpack --mode development --open"
},
"author": "",
"license": "ISC",
"dependencies": {},
"devDependencies": {
"@types/es6-shim": "^0.31.37",
"@types/express": "^4.16.0",
"ts-loader": "^4.4.2",
"typescript": "^2.9.2",
"webpack": "^4.12.0",
"webpack-cli": "^3.0.8",
"webpack-dev-server": "^3.1.4"
}
}
webpack.config.js
module.exports = {
entry: {
main: './src/index.ts'
},
module: {
rules: [
{
test: /\.js$/,
exclude: /node_modules/,
use: {
loader: "babel-loader"
}
},
{
test: /\.ts$/,
exclude: /node_modules/,
loader: 'ts-loader'
},
]
},
node: {
fs: 'empty',
net: 'empty'
},
target: 'node'
};
我还尝试通过 require 导入,使用 awesome-typescript-loader 并将 webpack 更新到最新版本。
尝试计算数字的总和时,我注意到以下行为:从这个答案
0.7 + 0.2 + 0.1 = 0.99999999...
中可以清楚地看出为什么会发生这种情况。
如果您需要正确的答案,该怎么办?
在这种情况下:0.7 + 0.2 + 0.1 = 1
这个问题的解决方案是什么?
有以下三个例子:
's' * 3'sss'示例:'s' * True
结果:'s'
示例:'s' * 3.7
结果:TypeError: can't multiply sequence by non-int of type 'float'
问题:
没有android studio 哪里可以下载android sdk?
有一个像这样的选择:
<select multiple id="my-select">
<option value="1">first</option>
<option value="2">second</option>
<option value="3">third</option>
</select>
如何以编程方式将焦点设置到给定的选择?
我写在 ionic 1.3 上。
我会检查任何答案。
我用ui-router它来创建应用程序中的路由结构。我注意到,当我向状态添加 resolve 时,我无法再访问该地址。控制台中未显示任何错误。路由结构看起来像这样:
setRoutes.$inject = ['$stateProvider'];
function setRoutes($stateProvider) {
$stateProvider
....other states
.state('content.dashboard.my.detail', {
url: '/:objectId/detail',
templateUrl: 'path/to/detail/template.html',
controller: 'detailController as vm',
resolve: {
object: objectResolver
}
})
objectResolver.inject = ['$stateParams', 'someObjectService', 'progress']
function objectResolver($stateParams, someObjectService, progress) {
var promise = someObjectService.fetch(objId)
progress.showSpiner(promise);
return promise;
}
上面的 objectResolver 函数中使用了一个自定义服务。
(function() {
'use strict';
angular
.module('some.module')
.factory('progressService', progressService);
var DEFAULT_MESSAGE = 'Loading...';
progressService.$inject = ['service3'];
function progressService(service3) {
var displayedSpinnersCount = 0;
return {
showSpiner: showSpiner
};
.......... other code
}
有A、B、C三种型号:
Class A:
some_field = models.CharF...
Class B:
a = models.ForeignKey('A')
с = models.ForeignKey('С')
Class C
some_field = models.CharF...
如何使用Django orm获取属于C的对象A的数量?
例如:
有对象:A1,A2。
对象:C1。
和连接:B1(A1,C1),B2(A1,C1),B3(A2,C1)。
在此示例中,属于 C 的对象 A 的数量将为 2。
我试过这样的:
queryset = A.objects.all()
queryset.values('b__c').annotate(num_results=Count('b__c'))
结果,我得到对象 C1 拥有 3 个对象。因此,我计算连接数,这不适合我。