我正在尝试对任何NavigationEnd路由器事件触发操作,除非在 a) 子路由之间导航;b) 在另一条特定路线上。
这是我的一部分app.routing.ts:
// some other routes setup...
{ path: 'scrapers/:version', component: SingleScraperComponent, children: [
{ path: '', redirectTo: 'statistics', pathMatch: 'full' },
{ path: 'statistics', component: ScraperStatisticComponent },
{ path: 'targets', component: ScraperTargetsComponent },
]},
// some other routes setup...
Run Code Online (Sandbox Code Playgroud)
这是我的Router活动订阅SingleScraperComponent:
// some component code
ngOnInit(): void {
this._router.events.filter(event => event instanceof NavigationEnd).takeWhile(() => this.isAlive).subscribe(
(event: NavigationEnd) => {
console.log(event);
if (event.url.indexOf('site-preview') === -1) {
this._site.resetQuery();
}
}
); …Run Code Online (Sandbox Code Playgroud) 我正在尝试制定一个inputNumber指令来防止输入(当值错误时不突出显示输入,但即使输入错误值):
a) 字母和符号,仅限于 [0-9] b) 尊重min和max参数 c) 通过greaterOrEqual/lessOrEqual属性与视图中的其他此类指令相关。
这是我的input-number.directive.ts:
import {Directive, HostListener, Input} from '@angular/core';
@Directive({
selector: '[inputNumber]'
})
export class InputNumberDirective {
@Input() min: number = 0; // will be input
@Input() max: number = 100; // will be input
@Input() greaterOrEqual: number = 23; // will be input
@Input() lessOrEqual: number = 77; // will be input
@HostListener('keypress', ['$event']) sanitizeValue(event: KeyboardEvent): boolean {
const …Run Code Online (Sandbox Code Playgroud) 美好的一天)我正在构建一个WordPress插件LMS,允许用户通过AJAX将他们完成的家庭作业文件附加到他们的答案.一切正常,但用户文件超过允许的最大大小的情况除外.在这种情况下,我的AJAX调用返回HTML,并带有以下警告:
<b>Warning</b>: POST Content-Length of XXXXX bytes exceeds the limit of XXXXX bytes in <b>Unknown</b> on line <b>0</b><br />
Run Code Online (Sandbox Code Playgroud)
由于在我的脚本的字符串0上生成了这种警告,它会死掉并忽略任何其他指令,因为我的调用留下了这个丑陋的字符串.你基本上可以忍受它,因为最终用户不会看到它(只是AJAX调用没有预期的结果),但我仍然想知道是否有机会跳过它并很好地处理它?
好的,我已经做过什么样的研究:
我发现Andrew Curioso的这个教程,并尝试从中做出类似的东西:
if (isset($_SERVER['CONTENT_LENGTH'])) {
if ($_SERVER['CONTENT_LENGTH'] > (substr(ini_get('post_max_size'), -1) * 1024 * 1024)) {
echo 'php errors is so much fun';
}
}
Run Code Online (Sandbox Code Playgroud)它没有产生预期的效果,因为我的脚本仍然只有从IF语句回显附加字符串的积极效果而死(此外,如果你尝试做类似wp_send_json(errorsArray)的事情,它将不会被执行).
使用display_errors,error_reporting关闭显示错误.好吧,这不是我需要的,因为它仍然不允许我继续使用脚本并创建自定义错误处理程序.
我的WP_DEBUG设置为FALSE
我不想要的是什么样的建议是手动编辑max_upload_size,max_post_size等.因为手动编辑服务器文件不符合插件的原则.无论如何,即使您将最大上传大小设置为10GB,一旦最终用户尝试上传11GB.
总而言之,众所周知,这种机制是在数千个网站和应用程序上实现的,我想知道如何最大限度地提高我的脚本质量,处理这个问题而不会出现过度杀伤和糟糕的用户体验.
感谢分享您的想法:)
UPD1 如果有帮助,这是我的AJAX调用:
$('#post-assignment-answer').on('click', function (event) {
event.preventDefault();
tinymce.triggerSave();
var answerContent = tinymce.get('assignment_user_input_textarea').getContent();
var answerFile = $('#assignment-file-upload')[0].files[0];
var formData = new FormData(); …Run Code Online (Sandbox Code Playgroud) 我创建了一个toggle-sorting组件,它检查当前的排序参数是否匹配它的排序 slug,并处理点击以输出更改
// toggle-sorting.component.ts
@Input() sortingSlug: string;
@Input() currSorting: string;
@Output() currSortingChange: EventEmitter<string> = new EventEmitter<string>();
@HostBinding('class.sorting-asc') activeAsc: boolean;
@HostBinding('class.sorting-desc') activeDesc: boolean;
/**
* Watch sorting params changes and update binding
*/
ngOnChanges() {
this.activeDesc = this.currSorting === this.sortingSlug;
this.activeAsc = this.currSorting === '-' + this.sortingSlug;
}
/**
* Watch click event to set sorting
*/
@HostListener('click') setSorting() {
if (this.activeDesc) {
this.currSortingChange.emit('-' + this.sortingSlug);
} else {
this.currSortingChange.emit(this.sortingSlug);
}
}
Run Code Online (Sandbox Code Playgroud)
我以这种方式使用我的父组件
// parent.component.html
// ... some layout …Run Code Online (Sandbox Code Playgroud)