AngularJS में इनलाइन टेम्प्लेट का उपयोग करना


82

मैं एक इनलाइन दृश्य टेम्पलेट लोड करना चाहता था।

मैंने टेम्पलेट को एक प्रकार के स्क्रिप्ट टैग में लपेटा text/ng-templateऔर आईडी को सेट किया temp1.html। और यहाँ मेरा मॉड्यूल कॉन्फिग कैसा दिखता है

learningApp.config(function ($routeProvider) {
    $routeProvider
        .when("/first",{ controller: "SimpleController", templateUrl: "temp1.html"})
        .when("/second", {controller: "SimpleController", templateUrl: "temp2.html"})
        .otherwise({redirectTo : "/first"});
});

यह मुझे GET http://localhost:41685/temp1.html 404 (Not Found)मेरे कंसोल विंडो में बताता है जिसका अर्थ है कि यह उस नाम की फ़ाइल की तलाश में है।

मेरा प्रश्न है: मैं इनलाइन टेम्प्लेट का उपयोग करने के लिए अपने मार्गों को कैसे कॉन्फ़िगर करूं?

अपडेट: यहां मेरा सर्वर-रेंडर DOM जैसा दिखता है

<!DOCTYPE html>
<html>
<head>
    <script src="/Scripts/angular.js"></script>
    <link href="/Content/bootstrap.css" rel="stylesheet"/>
</head>
<body>
    <div class="container">       
    <h2>Getting Started with Angular</h2>
    <div class="row">
        <div class="panel" ng-app="LearningApp">
            <div ng-view></div>
        </div>
    </div>

<script type="text/ng-template" id="temp1.html">
    <div class="view">
        <h2>First View</h2>
        <p>
            Search:<input type="text" ng-model="filterText" />
        </p>
        <ul class="nav nav-pills">
            <li ng-repeat="cust in customers | orderBy:'name' | filter: filterText "><a href="#">{{cust.name}} - {{cust.school}}</a></li>
        </ul>
    </div>
</script>

<script type="text/ng-template" id="temp2.html">
    <div class="view">
        <h2>Second View</h2>
        <p>
           Search:<input type="text" ng-model="filterText" />
        </p>
        <ul class="nav nav-pills">
            <li ng-repeat="cust in customers | orderBy:'name' | filter: filterText "><a href= "#">{{cust.name}} - {{cust.school}}</a></li>
        </ul>
    </div>
</script>
    </div>
    <script src="/Scripts/jquery-1.9.1.js"></script>
    <script src="/Scripts/bootstrap.js"></script>
    <script src="/Scripts/app/LearningApp.js"></script>
 </body>
</html>

जवाबों:


111

ओडी, आप सही रास्ते पर थे, एकमात्र समस्या यह थी कि टैग डोम तत्व के बाहर हैं, जिस पर ng-appनिर्देश का उपयोग किया जाता है। यदि आप इसे <body ng-app="LearningApp">तत्व में ले जाते हैं तो इन-लाइन टेम्पलेट को काम करना चाहिए।

आपको यह प्रश्न भी प्रासंगिक लग सकता है: क्या शुरुआत में अंगुलियजेएस को लोड करने के लिए एक तरीका है और जरूरत पड़ने पर नहीं?


2
अब मैं देखता हूं कि अधिकांश ट्यूटोरियल html एलिमेंट के एनजी-ऐप डायरेक्टिव को जोड़ना क्यों पसंद करते हैं। ऐसा इसलिए है क्योंकि उस ऐप / मॉड्यूल से संबंधित कुछ भी एनजी-ऐप स्कोप के भीतर होना चाहिए, इसलिए इसे html टैग में डालना भविष्य की समस्याओं से बचा जाता है
Ody

3
यह कुछ ऐसा है जिसका दस्तावेज़ीकरण का उल्लेख करना है। मैं घंटों सोचता रहा कि वे 404 क्यों दिखे ...
Rob Juurlink

32

टेम्प्लेट का नाम सेट करने के लिए स्क्रिप्ट-एलिमेंट का उपयोग करने की कोशिश करें।

<script type="text/ng-template" id="temp1.html">
   ... some template stuff
</script>

मैंने वह किया। काम नहीं किया। मुझे इस तथ्य पर संदेह है कि मेरा मुख्य पृष्ठ वास्तव में विशिष्ट html फ़ाइल नहीं है। जैसा कि सर्वर / कंट्रोलर में है
Ody

आप टेम्प्लेट फ़ाइलों का उपयोग क्यों नहीं करते, यह मेरी राय में अधिक स्पष्ट है।
tschiela

हां आप ठीक हैं। यह तरीका अच्छा काम करता है, बेहतर और सभी प्रदर्शन करता है। लेकिन मेरे पास ऐसे एप्लिकेशन हैं जो मैं माइग्रेट करना चाहता हूं जो पुराने फ्रेमवर्क जैसे बैकबोन में लिखे गए थे और वे इनलाइन टेम्प्लेट पर बहुत अधिक भरोसा करते हैं। इसलिए मैं जानना चाहता था कि यह कोणीय में कैसे किया जाता है।
ओडी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.