- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在检查我现有项目之一的 Angular 代码,并在下面的代码片段中找到。我们正在使用 Angular material datatable
在页面上呈现 View
export class Component implements OnInit,AfterViewInit{
private dataSource: MatTableDataSource = null;
@ViewChild(MatPaginator) paginator: MatPaginator;
columnsToDisplay = ['productId','productname'];
constructor(private _service : DataService) { }
ngOnInit() {
this._service.getProducts().subscribe(
((data : Product[]) => this.dataSource = new MatTableDataSource(data)),
() => console.log('THIS IS ERROR')
);
setTimeout(() => this.dataSource.paginator = this.paginator);
//this.dataSource.paginator = this.paginator;
}
ngAfterViewInit() {
this.dataSource.paginator = this.paginator;
}
}
我的问题是:
1) 由于 this.service.getData()
返回一个 Có thể quan sát được
并且 subscribe
将在 HttpResponse< 时被异步调用
可用, setTimeout
函数内的操作是否会仅在 subscribe
方法被调用后被调用?
2) 我已经看到 ngAfterViewInit
方法也包含与 ngOnInit
方法中的 setTimeout
方法完全相同的代码
3) 但是当这个方法被调用时 (ngAfterViewInit)
, this.products
仍然是 NULL 表明订阅还没有被调用 '
4) 这就是 setTimeout
hiện hữu ngOnInit
方法中被调用的原因吗?
5)如果是这种情况,ngAfterViewInit
方法有什么用?
1 Câu trả lời
1) 这取决于。订阅仅在操作完成时执行代码。因此,当 this.service.getData()
完成其工作时。 setTimeout 在延迟后完成这项工作。如果订阅需要的时间少于 setTimeout,它将首先执行。
2) 也许您试图注意到函数何时执行?
3) AfterViewInit 被多次触发。您可以像这样检查 if(!!something)
然后执行一些代码。
4) 您应该始终避免使用 settimeout(仅用于调试目的)。
biên tập:
ngOnInit() {
this._service.getProducts().subscribe(
((data : Product[]) => this.dataSource = new MatTableDataSource(data)),
() => console.log('THIS IS ERROR')
);
setTimeout(() => this.dataSource.paginator = this.paginator);
//this.dataSource.paginator = this.paginator;
}`
让我们稍微简化一下这段代码:
ngOnInit() {
this.service.doStuff()
.subscribe(result => {
this.functionA();
},
err => {
//Do other stuff in case of an error
});
this.functionB();
}
functionA(){
console.log("Hello,");
}
functionB(){
console.log("world!");
}
这段代码的输出将是:
世界!你好,
但为什么呢?
Đó là bởi vì observable
模式。
您可以想象当您与两个人同行时:一个懂英语,一个不懂英语。所以即使你说“你好吗?”首先是对不懂英语的人,他需要时间来理解你说什么并回答你。同时,另一个人(非常懂英语)立即回答你。
functionA
VàfunctionB
的例子是一样的。 FunctionA chỉ một在订阅捕获到某些内容时执行。这就是为什么它不首先被解雇的原因。你可以看到在这里放置了一个调试点:
ngOnInit() {
this.service.doStuff()
.subscribe(result => {
---> this.functionA();
},
err => {
//Do other stuff in case of an error
});
---> this.functionB();
}
希望对此有很好的解释。
现在让我们继续,让我们使用超时:
ngOnInit() {
this.service.doStuff()
.subscribe(result => {
this.functionA();
},
err => {
//Do other stuff in case of an error
});
settimeout(() => {
this.functionB();
}, 500);
}
哪个函数会先执行?
剧透:你不可能知道的。
如果您想知道为什么,这很简单:您确切知道函数 B 将在 500 毫秒后调用,但您无法知道需要多少时间使用订阅才能准备就绪。所以如果你运气好,你的订阅通常需要大约 500 毫秒才能完成,你可以尝试重新加载页面几次,有时你会看到 Hello, world!
,有时你会看到 world !你好,
.
以更好的方式回答您的问题:我真的不知道您为什么要这样放置代码,根本不知道。
ngAfterViewInit 是一个生命周期
,在 ngOnInit 之后调用,并在 Angular 完全初始化组件 View 后执行逻辑。
关于javascript - 使用 Angular Material DataTable 时 Angular 组件的 ngOnInit 中的 SetTimeOut 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52479205/
Tôi đã tìm kiếm trực tuyến nhưng không tìm thấy bài viết phù hợp nào giải thích cách sử dụng dịch vụ WCF bằng javascript, đặc biệt là WebScriptEndpoint. Có ai có thể hướng dẫn về vấn đề này không? Cảm ơn câu trả lời hay nhất. Đây là bài viết về
Tôi đang viết một chương trình C sẽ chạy các lệnh Linux, ví dụ: cat /etc/passwd | grep list | cut -c 1-5 Tôi không nhận được kết quả nào *ở đây cha đợi con đầu tiên (chi
Vì vậy, tôi đang cố gắng xử lý việc tải tệp lên và sau đó lưu trữ tệp đó vào cơ sở dữ liệu dưới dạng tệp nhị phân. Sau khi lưu trữ, tôi cố gắng phục vụ tệp theo URL đã cho. Có vẻ như tôi không thể tìm ra phương pháp nào hiệu quả ở đây. Tôi cần sử dụng cơ sở dữ liệu vì tôi sử dụng Google Apps
Tôi đang cố gắng tạo một macro thêm công thức bên dưới vào một ô rồi kéo công thức đó xuống toàn bộ cột và sao chép công thức đó vào cột H. Tôi muốn nhập dữ liệu vào cột F và H cho công thức: Range("F1").formula = "=IF(ISE
Vấn đề này tương tự như vấn đề này, nhưng tôi muốn sử dụng OperatorPrecedenceParser để phân tích cú pháp một biểu thức với ứng dụng hàm trong FParsec. Đây là AST của tôi: type Expression =
Tôi muốn thay đổi truy vấn này thành mã bằng cách sử dụng sequelize và node.js tùy thuộc vào nơi select COUNT(gender) as genderCount from customers where
Tôi đang sử dụng GNU bash, phiên bản 5.0.3(1)-release (x86_64-pc-linux-gnu), và tôi tự hỏi tại sao tôi lại gặp lỗi cú pháp cho một câu lệnh gán đơn giản: #/bin/bash var1=/tmp
Sau đây là lý do tại sao mã của tôi không hoạt động trong IE. Mã của tôi hoạt động tốt trên mọi trình duyệt. Không có gì. Nhưng khi tôi chạy dự án của mình trên IE, nó lại phát hiện lỗi. Và lớp jquery và insertadjacentHTMl của tôi không hoạt động
Tôi đang cố gắng thay đổi innerHTML của một thẻ. Tôi không có quyền truy cập vào biểu mẫu nên không thể chỉnh sửa HTML. Mã định danh duy nhất của thẻ là thuộc tính "for". Sau đây là cấu trúc của đầu vào và nhãn:
Tôi có một trang nơi tôi trả về bài đăng của người dùng, có thể bình luận tức thời vào các bài đăng đó bằng một số mã jquery và sau khi có bình luận mới, tôi chèn bình luận mới vào bên dưới bài đăng cùng với nút xóa. Vấn đề là nút Xóa không hoạt động trên phần tử mới được chèn vào,
Tôi có một tệp "phân cách bằng dấu gạch ngang" với khoảng 20 cột. Tôi chỉ muốn băm cột đầu tiên là một số như số tài khoản bằng cách sử dụng sha1sum và trả về phần còn lại của các cột theo nguyên trạng. Cách tốt nhất để thực hiện việc này bằng awk hoặc sed là gì? Tài khoản
Tôi cần chèn nội dung sau vào bảng của mình... Bảng người dùng của tôi có năm cột id, tên người dùng, mật khẩu, tên, mục nhập. (Tôi chưa gửi bất cứ thứ gì vào mục nhập, tôi sẽ làm sau bằng php) nhưng vì lý do nào đó tôi cứ nhận được lỗi này: #1054 - U
Vì vậy, tôi đang cố gắng tạo một trường nhập liệu mà tôi có thể nhập bất kỳ ký tự nào vào đó, sau đó viết thường giá trị đã nhập, xóa mọi ký tự không phải chữ và số, chỉ để lại dấu "." thay cho dấu cách. Ví dụ, nếu tôi nhập: 70% Trái Đất là nước, -!*#$^^ & 30% đất
Tôi đang cố gắng làm một điều mà tôi nghĩ là khá đơn giản nhưng vì lý do nào đó tôi lại không nhận được kết quả như mong muốn? Tôi mới làm quen với javascript nhưng đã có kinh nghiệm với java nên chắc chắn là tôi không sử dụng quy tắc chính xác nào cả. Đây là phương pháp để lấy giá trị đầu vào, kiểm tra lựa chọn
Tôi đang cố gắng tải dữ liệu từ cơ sở dữ liệu mysql bằng angularjs. Ứng dụng hoạt động theo cách này: người dùng đăng nhập và tên người dùng của họ được lưu trữ trong cookie. Tên người dùng này được hiển thị trên trang chủ Tôi muốn lấy giá trị này và truyền nó qua angularjs
Tôi đang sử dụng autoLayout và muốn đặt UIlabel vào UITableViewCell và nó phải luôn nằm ở bên phải và ở giữa ô. Đây là những gì tôi muốn đạt được vì vậy ở đây bạn có thể thấy những gì tôi đang nói đến
Tôi cần truy vấn elasticsearch tương đương với MySql. Truy vấn sql của tôi: SELECT DISTINCT t.product_id AS id FROM tbl_sup_price t
Tôi đang triển khai mã để làm việc với JSON. func setup() { nếu let flickrURL = NSURL(string: "https://api.flickr.com/
Tôi đã thử sử dụng vòng lặp for để khai báo các biến và sau đó kiểm tra xem cols và rols có giống nhau không. Nếu đúng như vậy, nó sẽ chạy hàm đệ quy. Tuy nhiên, tôi đang gặp sự cố khi thực hiện lệnh do trong javascript. Có ai có thể giúp được không? Bây giờ, khi so sánh cột 1 và
Tôi đã đưa ra một ví dụ ngắn về một vấn đề mà tôi đang giải quyết. Mã HTML: 1 2 3 Mã CSS: .BB a:hover{ color: #000; } .BB > li:after {
Tôi là một lập trình viên xuất sắc, rất giỏi!