2016-07-27 51 views
8

Tôi có một biểu hiện nhỏ để kiểm tra xem 2 đối tượng là khác nhau hay không, để hiển thị yếu tố này (thông qua việc thêm tên lớp):Sử dụng JSON.stringify trong một biểu thức trong Angular2 mẫu

<div ngClass='{{JSON.stringify(obj1) != JSON.stringify(obj2) ? "div-show" : ""}}'></div> 

Vấn đề là tôi gặp phải lỗi này: Cannot read property 'stringify' of undefined.

Điều tôi cần có cách giải quyết hoặc giải pháp thích hợp nếu có. Cảm ơn.

PS: Tôi sử dụng JSON.stringify() để so sánh 2 đối tượng đơn giản, không có gì lạ mắt ở đây.

Trả lời

18

này không có quyền truy cập vào tất cả javascript, chỉ tính thành phần và phương pháp. Tôi nghĩ rằng nó sẽ là tốt nhất để tạo ra một phương pháp 'stringify' trên thành phần của bạn, nhưng bạn chỉ có thể thiết lập một tài sản JSON:

public constructor() { 
    this.JSON = JSON; 
} 

Ngoài ra tôi nghĩ rằng biểu hiện của bạn là ngược. NgClass lấy lớp css làm tên thuộc tính và giá trị true/false để cho biết lớp đó có nằm trên phần tử hay không và phải nằm trong ngoặc đơn:

<div [ngClass]="{'div-show': JSON.stringify(obj1) != JSON.stringify(obj2)}"></div> 
+0

Cảm ơn bạn đã trả lời. Câu trả lời của bạn và @ rashfmnb là khá nhiều như nhau. Về việc bổ sung, tôi đã trải qua nhiều tình huống với 'ngClass' và tôi thấy cách làm của mình là cách vững chắc nhất để sử dụng' ngClass'. Tất nhiên, bạn hoạt động hoàn hảo, nhưng trong một số trường hợp, nó không, so với tôi. Một ví dụ mà [ngClass] không thể hoạt động: '

'. Nếu tôi sai, hãy sửa tôi. –

3

bạn có thể đạt được điều này như thế này trong thành phần làm điều này.

myjson:any=JSON; 

và bạn xem làm điều đó như mã Template

<div ngClass='{{myjson.stringify(obj1) != myjson.stringify(obj2) ? "div-show" : ""}}'></div> 
+0

Cảm ơn bạn đã trả lời. Mã của bạn hoạt động hoàn hảo nhưng câu trả lời của @Jason Goemaat dường như sạch hơn đối với tôi. –

+0

người bạn của tôi không có vấn đề – rashfmnb

Các vấn đề liên quan