我正在使用來自用於AngularJS的xeditable
模塊的editable-text
指令。有沒有辦法禁用整個頁面的指令?AngularJS禁用指令
我想過使用替換可編輯文本{{variable}}
,其中variable="editable-text"
啓用和variable="somethingElse"
禁用。但是,這會在html中產生無意義的屬性。
我正在使用來自用於AngularJS的xeditable
模塊的editable-text
指令。有沒有辦法禁用整個頁面的指令?AngularJS禁用指令
我想過使用替換可編輯文本{{variable}}
,其中variable="editable-text"
啓用和variable="somethingElse"
禁用。但是,這會在html中產生無意義的屬性。
可以使用其他指令刪除指令。爲此,新指令應該比被刪除的指令具有更高的優先級,然後在編譯狀態下搜索帶有所需指令的元素並將tag/class /元素一起移除。這裏是一個非常簡單的實現這一點:
.directive("disableDirective", function() {
function compile (el, attr) {
var hasDirective = el[0].querySelectorAll("["+attr.disableDirective+"]");
[].forEach.call(hasDirective, function (el) {
el.removeAttribute(attr.disableDirective);
});
}
return {
priority: 100000,
compile: compile
};
})
以下HTML DIV將是可見的,這要歸功於我們的指令:
<body disable-directive="ng-hide">
<div ng-hide="true">Hidden</div>
</body>
你必須設置disable-directive="editable-text"
的頁面。
如果你只是想永遠關閉所有應用該指令,我知道有兩種方式:
這個指令創建裝飾,只是設置compile
功能空函數例如到angular.noop
。檢查這些東西的更多信息:https://docs.angularjs.org/api/auto/service/$provide#decorator。或者您也可以使用相同的名稱和限制(A | E | C | M)創建指令,但具有更高的優先級並且terminal
屬性設置爲true
。但是你應該時刻記住,這個指令將會關閉同一個元素上所有低優先級的指令。 (所以這個解決方案看起來像我反模式)
謝謝,這真的很有幫助。以下是此答案的示例/代碼http://pastebin.com/raw/mHEn1s9D –
我相信你可以使用裝飾器刪除restrict字段。這將禁用該指令。下面是使用NG-顯示
var app = angular.module("app", []);
//disable ng-show
app.config(function($provide) {
$provide.decorator('ngShowDirective', function($delegate) {
var directive = $delegate[0];
directive.restrict = "";
return $delegate;
});
});
一個例子是有一個原因,你不能對指令代碼的網頁控制器,採用NG-隱藏=「booleanVar」上的範圍變量,然後切換到booleanVar顯示或隱藏? – edzillion