2016-07-27 10 views
8

मैं एक छोटे से अभिव्यक्ति की जांच करने के लिए कि क्या 2 वस्तुओं अलग हैं या नहीं, आदेश (वर्ग के नाम जोड़ने के माध्यम से) इस तत्व को प्रदर्शित करने में है:Angular2 टेम्पलेट में एक अभिव्यक्ति में JSON.stringify का उपयोग

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

समस्या क्या मुझे यह त्रुटि मिलती है: Cannot read property 'stringify' of undefined

मुझे क्या काम करने के लिए एक तरीका चाहिए, या उपलब्ध होने पर उचित समाधान। धन्यवाद।

पीएस: मैं JSON.stringify() का उपयोग 2 साधारण वस्तुओं की तुलना करने के लिए करता हूं, यहां कुछ भी कल्पना नहीं है।

उत्तर

18

खाका कोड की तरह यह कर सभी जावास्क्रिप्ट, केवल घटक गुण और तरीकों के लिए उपयोग नहीं है। मुझे लगता है कि अपने घटक पर एक 'stringify' विधि बनाने के लिए सबसे अच्छा होगा, लेकिन आप केवल एक JSON गुण सेट कर सकते हैं:

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

इसके अलावा मुझे लगता है कि आपकी अभिव्यक्ति पीछे की ओर है। NgClass संपत्ति नाम और एक सही/गलत मूल्य बताने के लिए है कि क्या उस वर्ग तत्व पर है के रूप में सीएसएस वर्ग लेता है, और यह कोष्ठक में होने की जरूरत है:

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

उत्तर देने के लिए धन्यवाद। आपका उत्तर और @ rashfmnb बहुत समान हैं। इसके अलावा, मैंने 'ngClass' के साथ कई परिस्थितियों का अनुभव किया है और मुझे लगता है कि ऐसा करने का मेरा तरीका 'ngClass' का उपयोग करने का सबसे ठोस तरीका है। बेशक, आपका पूरी तरह से काम करता है, लेकिन कुछ मामलों में यह मेरी तुलना में नहीं करता है। एक उदाहरण है कि [ngClass] काम नहीं कर सकता: '

'। अगर मैं गलत हूं, तो मुझे सही करने के लिए स्वतंत्र महसूस करें। –

3

आप इसे अपने घटक में इस तरह प्राप्त कर सकते हैं।

myjson:any=JSON; 

और आप में दृश्य इस

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

जवाब के लिए धन्यवाद। आपका कोड पूरी तरह से काम करता है लेकिन @ जेसन गोएमाट का जवाब मेरे लिए क्लीनर लगता है। –

+0

मेरे दोस्त को कोई समस्या नहीं – rashfmnb

संबंधित मुद्दे