ng-include ตามเงื่อนไขใน angularjs


94

ฉันจะทำ ng-include ตามเงื่อนไขใน angularJS ได้อย่างไร

เช่นฉันเพียงต้องการที่จะรวมถึงบางสิ่งบางอย่างถ้าตัวแปรมีการตั้งค่าxtrue

<div ng-include="/partial.html"></div>

คำตอบ:


120

หากคุณใช้ Angular v1.1.5 หรือใหม่กว่าคุณยังสามารถใช้ng-if :

<div ng-if="x" ng-include="'/partial.html'"></div>

หากคุณมีเวอร์ชันเก่ากว่า:

ใช้ng-switch :

<div ng-switch on="x">
   <div ng-switch-when="true" ng-include="'/partial.html'"></div>
</div>

ซอ


5
ใช่ตอนนี้ใช้งานไม่ได้ใน 1.2: github.com/angular/angular.js/issues/3627
Mark Rajcok

2
ปัญหาได้รับการแก้ไขแล้วใน v1.2.2-23ba287 code.angularjs.org/snapshot/angular.js
Eugene Gluhotorenko

7
ดูgithub.com/angular/angular.js/issues/3627#issuecomment-23539882 ; ในเวอร์ชันปัจจุบัน (1.2. *) คุณไม่สามารถใช้ ng-switch และ ng-include ในองค์ประกอบเดียวกันได้ดังนั้นคุณต้องมีบางอย่างเช่น: <div ng-switch-when = "true"> <div ng-include = "'บางสิ่ง '"> </div> <// div>
Maarten

68

คุณยังสามารถทำได้

<div ng-include="getInclude()"></div>

ในคอนโทรลเลอร์ของคุณ

$scope.getInclude = function(){
    if(x){
        return "partial.html";
    }
    return "";
}

ดีจริงๆ ng-switchคำตอบที่ถูกทำเครื่องหมายไม่ทำงานสำหรับฉัน
im1dermike

1
คอนโทรลเลอร์เหมาะสำหรับไฟล์ set view หรือไม่? ฉันคิดว่าคำตอบ @Mark Rajcok เป็นจริง
ivahidmontazer

16

คำตอบหนึ่งในเวอร์ชันที่อ่านได้ง่ายขึ้นเล็กน้อย พลัสตั้งค่าng-includeการnullลบองค์ประกอบ - ng-ifเช่นเดียวกับ

<div ng-include="x ? 'true-partial.html' : null"></div>

11

หากเงื่อนไขนั้นง่ายเพียงพอคุณสามารถใส่ตรรกะเงื่อนไขลงในนิพจน์ ng-include ได้โดยตรง:

<div ng-include="x && 'true-partial.html' || 'false-partial.html'"></div>

โปรดทราบว่านิพจน์xไม่ได้อยู่ในเครื่องหมายคำพูดเดี่ยวดังนั้นจึงได้รับการประเมิน ดูhttp://plnkr.co/edit/4fvNDa6Gm3dbVLgsAZrAสำหรับรายละเอียดเพิ่มเติม


ฉันจะบอกว่าโซลูชันที่ยอมรับนั้นสามารถอ่านได้มากกว่าเนื่องจากเงื่อนไขการตรวจสอบและการรวมจริงนั้นแยกออกจากกันอย่างดี
Tobias

2

ฉันพบปัญหาที่คล้ายกันและการค้นพบนี้อาจช่วยใครบางคนได้ ฉันต้องแสดงบางส่วนที่แตกต่างกันเมื่อคลิกลิงก์ แต่ทั้ง ng-if และ ng-switch ทั้งสองไม่ทำงานในสถานการณ์นี้ (โค้ดด้านล่างไม่ทำงาน)

<button type="button" class="btn btn-link" ng-click="viewType('LIST')">List All</button>
<button type="button" class="btn btn-link" ng-click="viewType('EDIT')">Edit</button>
<button type="button" class="btn btn-link" ng-click="viewType('VIEW')">View</button>

<section class="col-md-8 left-col">
    <span ng-if = "LIST">
        <div data-ng-include="'./app/view/articles/listarticle.html'">
    </span>
    <span ng-if = "EDIT">
        <div data-ng-include="'./app/view/articles/editorarticle.html'">
    </span>

</section>

สิ่งที่ฉันทำคือแทนที่จะใช้ ng-if เมื่อคลิกที่ลิงค์เพียงแค่อัปเดตค่าของ partialArticleUrl (ซึ่งเป็นโมเดลในคอนโทรลเลอร์) และประกาศโค้ดด้านล่างบน html

        <section class="col-md-8 left-col">
            <div data-ng-include="partialArticleUrl">
        </section>
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.