मेरे पास एक निर्देश है जिसका उपयोग मैं फॉर्म सत्यापन बॉयलरप्लेट के लिए करता हूं जिसे मैंने हाल ही में दोबारा प्रतिक्रिया दी थी। मुझे विस्तार से पहले थोड़ा आगे निर्देश की व्याख्या करने की अनुमति दें।टेम्पलेट से पहले AngularJS निर्देश के आंतरिक HTML को पुनर्प्राप्त करें Url इसे ओवरराइड करता है
निर्देश उपयोग:
<form class="form-horizontal" name="personalDetails" validated-form>
<!-- Pass buttons into form through here -->
<a href="" class="btn btn-success"
data-ng-click="saveDetails()"
data-ng-disabled="!personalDetails.$valid">Save Changes</a>
</form>
इससे पहले, मेरी निर्देश कुछ इस तरह देखा, और यह काम किया।
app.directive('validatedForm', function($compile, $sce) {
return {
restrict: 'A',
scope: true,
link: function(scope, element, attrs) {
var template = //... HTML boilerplate code
var buttons = element.html(); // Get contents of element before overriding
element.html(template + buttons);
$compile(element.contents())(scope);
}
}
});
एचटीएमएल टेम्पलेट गन्दा हो रहा था, और मैं उनके बजाय टेम्पलेट के 'अंदर' बटन लपेटना चाहता था। इसलिए मैंने जो कुछ सोचा था वह एक बेहतर निर्देश था।
app.directive('validatedForm', ['$compile', '$sce', function ($compile, $sce) {
var domContent = null;
return {
restrict: 'AE',
scope: true,
templateUrl: '/Content/ngViews/directives/validated-form.html',
link: function(scope, element, attrs) {
// This now returns the contents of templateUrl
// instead of what the directive had as inner HTML
domContent = element.html();
// Scope
scope.form = {
caption: attrs.caption,
location: 'Content/ngViews/forms/' + attrs.name + '.html',
buttons: $sce.trustAsHtml(domContent),
showButtons: !(domContent.replace(' ', '') === '')
};
}
};
}]);
तो क्या मैं देख रहा हूँ कि element.html() अब मेरे निर्देश के भीतर एचटीएमएल की सामग्री के बजाय templateUrl की सामग्री को पुन: प्राप्त करता है। टेम्पलेट यूआरएल द्वारा ओवरराइड होने से पहले मैं अपने निर्देश की सामग्री कैसे प्राप्त कर सकता हूं?
यह ठीक आप क्या कहते हैं करता है और, सही जवाब है, हालांकि के रूप में एक अनुवर्ती - में पारित कर दिया एचटीएमएल बाध्यकारी $ sce.trustAsHtml() का उपयोग कर ng-bind-html के माध्यम से templateUrl दायरे के साथ पारित क्लिक ईवेंट को गड़बड़ कर रहा है। क्या यह निर्देश में एक नए नियंत्रक की उपस्थिति के कारण है? –
यकीन नहीं है कि आप ईमानदार होने के लिए इसका उपयोग क्यों करते हैं ... बस एचटीएमएल को गुंजाइश से गुजरने से इसे संकलित नहीं किया जाएगा। डेमो बनाएं कुल मिलाकर आप जो कर रहे हैं उसके बारे में थोड़ा उलझन में हैं .... आपने अनुरोध के रूप में एचटीएमएल तक पहुंचने का एक तरीका दिया है। आप टेम्पलेटर को आयात करने के लिए प्लंकर का उपयोग कर सकते हैं ... बस इसमें HTML के साथ एक फ़ाइल बनाएं और उसी निर्देशिका में यूआरएल समायोजित करें (केवल फ़ाइल) – charlietfl
धन्यवाद, थोड़ी देर तक इसे दूर कर देगा। और यदि मुझे पता चलता है कि समस्या क्या है तो एक अपडेट पोस्ट करेगा। शायद मेरे कोड के साथ कुछ करने के लिए। जैसे मैंने कहा, यह वास्तविक सवाल का सही जवाब है, धन्यवाद, धन्यवाद! –