所以我有一个删除东西的按钮。
我已经创建了一个'confirm delete'指令,它只是打开一个带有确认消息的$ modal并且我有一个先前创建的'loading spinner'指令,该指令显示一个微调器,直到一个promise被解决/拒绝。
有没有办法在不创建新指令的情况下组合/链接这些指令?
我想触发confirm指令,然后在truthy结果中,提交加载微调器指令。
提前致谢!
ConfirmDelete:
var ConfirmDeleteDirective = (function () {
function ConfirmDeleteDirective($parse, $modal) {
var _this = this;
this.$parse = $parse;
this.$modal = $modal;
this.restrict = "A";
this.link = function (scope, element, attrs) {
var func = _this.$parse(attrs["confirmDelete"]);
element.on("click", function (evt) {
var mInstance = _this.$modal.open({
backdrop: "static",
templateUrl: "confirmDelete.html"
});
mInstance.result.then(function () {
if (func) {
func.apply(element);
}
}, function () {
//do nothing!
});
});
};
}
return ConfirmDeleteDirective;
})();
LoadingSpinner:
var LoadingSpinnerDirective = (function () {
function LoadingSpinnerDirective($parse) {
var _this = this;
this.$parse = $parse;
this.restrict = "A";
this.link = function (scope, element, attrs) {
if (attrs["targetElement"]) {
var targetElement = angular.element("#" + attrs["targetElement"]);
if (targetElement.length > 0) {
element = targetElement;
}
}
var fn = _this.$parse(attrs["loadingSpinner"]), target = element[0], eventName = attrs["eventName"] || "click", opts = {
lines: 11,
length: 9,
width: 2,
radius: 4,
corners: 1,
rotate: 0,
direction: 1,
color: "#fff",
speed: 1.3,
trail: 60,
shadow: false,
hwaccel: false,
className: "spinner",
zIndex: 2e9,
top: attrs["spinner-top"] || "50%",
left: attrs["spinner-left"] || "50%"
};
// implement our click handler
element.on(eventName, function (event) {
scope.$apply(function () {
element.prop("disabled", true);
element.css("position", "relative");
var spinner = new Spinner(opts).spin(target);
// expects a promise
// http://docs.angularjs.org/api/ng.$q
fn(scope).then(function (res) {
element.prop('disabled', false);
spinner.stop();
return res;
}).catch(function (res) {
element.prop('disabled', false);
spinner.stop();
});
});
});
};
}
return LoadingSpinnerDirective;
})();
用法示例:
<button class="btn btn-default" loading-spinner="saveAttribute(model)">Save</button>
<button class="btn" confirm-delete="deleteAttribute(attribute)">Delete</button>
答案 0 :(得分:1)
<div loading-spinner confirm-delete />
使用优先级来确保正确的顺序。