2017-02-10 62 views
2

我在plnkr創建了一個例子: http://plnkr.co/edit/kcclSc10nPB8Qzm3qr7s?p=preview編譯指示NG-如果

那裏,你可以看到,有是在編譯功能,如果它很好地工作增加另一個指令一個指令有父母div上沒有ng-if。一旦ng-if在那裏,第二條指令不再起作用。但它與ng-show一起工作。

我的真實情景是我需要在某些按鈕上添加工具提示。我們使用的工具提示是獲取文本顯示的指令。我們根據密鑰從後端接收的文本。因此,通過所有控制器調用該服務以獲取基於該鍵的文本,然後將該文本添加到該範圍並將其提供給工具提示指令不是一種選擇。

其中一個按鈕是ok按鈕,其中atm只是複選標記的圖像。只有這個按鈕出現在72個文件中,所以手動更改所有內容不是一個選項。爲此,我在代碼中查找了class="acceptbtn",並用新的指令名稱和class="acceptbtn"替換了它。所以現在所有的按鈕都有我的指令來獲取密鑰。在我的指令內部,我根據傳遞的鍵獲取文本,並將該工具提示指令與我收到的文本相加。

這在一些情況下很好地工作。問題是如果有一個包裝divng-if它不起作用。在所有這些文件中尋找所有ng-if也不是一個選項(除非沒有其他選項)。

那麼有沒有辦法解決這個問題?意思是,在plnkr中,第三個div應該看起來像第二個div。 感謝

回答

1

工作Plunkr

app.directive('dir1', function($compile){ 
return{ 
    restrict: 'A', 
    link: function(scope, element, attrs) { 
     element.removeAttr('dir1'); 
     element.attr('dir2', ''); 
     $compile(element)(scope); 
     } 
} 
}); 

app.directive('dir2', function($compile){ 
return { 
    restrict: 'A', 
    link: function(scope, element, attrs) { 
     element.removeAttr('dir2'); 
     element.attr('style', "width:400px"); 
     $compile(element)(scope); 
    } 
    }; 
}); 

我稍微修改您的指示,使用鏈接功能。我個人僅在我的指令模板發生運行時更改時才使用編譯。

+0

真棒,它的作品!我只改變了第一條指令,因爲我沒有訪問第二條指令。但它也是這樣工作的。你能否編輯一下你的答案,簡要解釋發生了什麼,有什麼不同?謝謝 – bokkie