2014-10-28 11 views
7

मैं अपने help-button निर्देश से अलग अलगाव से कुछ प्राप्त करने की उम्मीद कर रहा हूं।एंगुलरजेएस जैस्मीन अलगाव स्कोप() अपरिभाषित

it('should contain proper scope, depending on attributes', function() { 

     var el = compile('<help-button context-id="1"></help-button>')(scope); 
     scope.$digest(); 


     console.log("el: " + el); 
     console.log('Isolated scope: ' + el.isolateScope()); 
    .. 
    }); 

- इससे पहले कि प्रत्येक परीक्षा यह

beforeEach(inject(function($compile, $rootScope, $injector) { 

    compile = $compile; 
    scope = $rootScope.$new(); ... 

करता है यह प्रिंट:

'el: [Object Object]' 
'Isolated scope: undefined' 

सवाल यह है: क्यों मैं वापस हो रही है अपरिभाषित? भले ही अलग-अलग गुंजाइश में कुछ भी न हो, फिर भी यह खाली {} वस्तु होना चाहिए। लेकिन वैसे भी - परीक्षण गलत है - यह अलग-अलग दायरे को नहीं दिखाता है (वास्तविक में) में डेटा होता है।

उत्तर

6

मैं बेवकूफ हूँ।

लेकिन मेरे अपने प्रश्न का उत्तर देगा क्योंकि "बेवकूफ बेवकूफ है" - यानी एक बार ऐसा ही हो सकता है (या भविष्य से खुद के लिए)।

समस्या मेरे helpbutton.html में थी जो मेरा निर्देश उपयोग कर रहा है (जिसे मैंने इस प्रश्न में नहीं दिखाया/उल्लेख नहीं किया)।

ताकि templateUrlhelpbutton.html फ़ाइल का जिक्र कर रहे थे जो HTML को ठीक से संकलित किया जाना चाहिए।

एक बार जब मैंने el.html() के आउटपुट को देखा तो मुझे पता चला कि यह उचित रूप से प्रस्तुत नहीं किया गया था (कुछ गायब टैग या कुछ थे)।

Thant मैं से scope प्राप्त नहीं कर सका।

+5

तो आपने अपनी एचटीएमएल समस्या को कैसे ठीक किया? – joncodo

+0

आपको अपने उत्तर को सही उत्तर के रूप में चिह्नित करना चाहिए। – mostruash

1

बस एक ही समस्या से टकरा (हालांकि अगर एक टेम्पलेट html करने के लिए ठीक से नहीं किया गया था प्रदान की गई लॉग पर अपवाद के कुछ प्रकार है करने के लिए अच्छा होगा), लेकिन एक अलग कारण के साथ। बस किसी और के पास एक ही समस्या है, और यह संभवतः वास्तव में स्पष्ट है जब आप इसे पहले देख चुके हैं, लेकिन फिर भी।

यदि आप टेम्पलेट यूआरएल का उपयोग कर रहे हैं, तो .isolateScope() फ़ंक्शन तब तक अपरिभाषित नहीं होगा जब तक आप वास्तव में कॉल नहीं करते हैं। $ Digest और $ httpBackend.flush();

जब आप सीधे निर्देश से टेम्पलेट का उपयोग करते हैं, तो यह उस समय उपलब्ध होगा जब आप संकलन (तत्व) (दायरा) करते हैं।

यह आश्चर्यचकित हो सकता है कि आपने टेम्पलेट यूआरएल का उपयोग करने के लिए निर्देश बदल दिया है, या नियमित रूप से अलग से अलग करने के लिए इसे बदल दिया है।

 responseHtml = '<div></div>'; 
     $httpBackend.expectGET('template.html').respond(200, responseHtml); 

     var html = '<widget></widget>'; 
     element = angular.element(html); 
     var compiled = $compile(element)(scope); 

     console.log(element.isolateScope()); // undefined 

     $rootScope.$digest(); 

     console.log(element.isolateScope()); // undefined 

     $httpBackend.flush(); 

     console.log(element.isolateScope()); // now it will be available 
संबंधित मुद्दे