angularjs
2013-12-09 50 views 0 likes 
0

我使用以下指令調用:如何使指令替換包含DIV本身的DIV中的所有內容?

<div data-my-activity></div> 

這裏的指令:

app.directive('myActivity', function() { 
    return { 
     restrict: "A", 
     template: "<div class='activity-mask' data-ng-show='fetching.length > 0' >" + 
     "<ul>" + 
     "<li data-ng-repeat='activity in fetching'>{{ activity }}</li>" + 
     "</ul>" + 
     "</div>" + 
     "<div class='activity-mask' data-ng-show='loading.length > 0' >" + 
     "<ul>" + 
     "<li data-ng-repeat='activity in loading'>{{ activity }}</li>" + 
     "</ul>" + 
     "</div>" 
    }; 
}); 

當我使用這個指令它給了我:

<div data-my-activity=""> 
    <div class="activity-mask ng-hide" 
     data-ng-show="fetching.length &gt; 0"> 
     <ul><!-- ngRepeat: activity in fetching --></ul> 
    </div> 
    <div class="activity-mask ng-hide" 
     data-ng-show="loading.length &gt; 0"> 
     <ul><!-- ngRepeat: activity in loading --></ul> 
    </div> 
</div> 

有沒有一種方法可以讓我如果fetching.length和loading.length都等於0,請給我以下內容:

<div style="display:none"> 
    <div class="activity-mask ng-hide" 
     data-ng-show="fetching.length &gt; 0"> 
     <ul><!-- ngRepeat: activity in fetching --></ul> 
    </div> 
    <div class="activity-mask ng-hide" 
     data-ng-show="loading.length &gt; 0"> 
     <ul><!-- ngRepeat: activity in loading --></ul> 
    </div> 
</div> 

以及如果fetching.length或loading.length不等於0?

<div style="display:block">> 
    <div class="activity-mask ng-hide" 
     data-ng-show="fetching.length &gt; 0"> 
     <ul><!-- ngRepeat: activity in fetching --></ul> 
    </div> 
    <div class="activity-mask ng-hide" 
     data-ng-show="loading.length &gt; 0"> 
     <ul><!-- ngRepeat: activity in loading --></ul> 
    </div> 
</div> 

更新:

我想提出的答案,但它給我帶引號的問題,因爲我有三個層次上一行引號。

app.directive('myActivity', function() { 
    return { 
     restrict: "A", 
     replace: true, 
     template: "<div ng-style="{display: loading.length > 0 || fetching.length > 0 ? 'block' : 'none'}"> 
     "<ul>" + 
     "<li data-ng-repeat='activity in fetching'>{{ activity }}</li>" + 
     "</ul>" + 
     "</div>" + 
     "<div class='activity-mask' data-ng-show='loading.length > 0' >" + 
     "<ul>" + 
     "<li data-ng-repeat='activity in loading'>{{ activity }}</li>" + 
     "</ul>" + 
     "</div>" + 
     "</div>" 
    }; 
}); 

回答

4

您應該能夠選擇

replace: true 

傳遞到指令,以及指定的模板將替換元素的HTML的一切,包括元素本身

app.directive('myActivity', function() { 
    return { 
    restrict: "A", 
    replace: true, 
    template: "..." 
    }; 
}); 

編輯:要動態顯示/隱藏內容,您應該能夠使用ngStyle設置display:none模板

template: '<div ng-style="{display: loading.length > 0 || fetching.length > 0 ? 'block' : 'none'}">....'; 

或者,你可以做一個ngIf你實際上並不需要在DOM元素

template: '<div ng-if="loading.length > 0 || fetching.length > 0">....'; 

編輯:我有ngShow,我實際上意味着ngIf

+0

謝謝,但我怎麼能做到這一點還可以根據任何一個數組是否有長度來改變none和block之間的外部DIV的顯示? –

+0

我已經編輯了答案,以顯示如何做到這一點 –

+0

我試圖做你說的,但我有問題,因爲我有一個「然後一個」,然後是一個「彼此內部。你能看看我的問題更新部分。讓我知道你認爲是什麼解決方案,如果我走在正確的軌道上。謝謝 –

相關問題