我写了一个自定义基本指令。我将使用此基本指令用于其他指令...例如,我将为deleteButton
编写指令并将其附加到baseConfirmation
。
我可以使用Angular.js指令继承,并deleteButton
需要baseConfirmation
。但我想使用下划线的_.extend()
,因为拥有类似的东西会更清晰
_.extend(deleteButtonDirective, baseConfirmation, templateUrl: '/new/url/template);
但问题是,因为.directive('baseConfirmation'
不是一个对象......不确定如何替换这个名字。我需要将指令名称替换为deleteButtonDirective
。是否可以使用_.extend()?
angular.module('main.vips').directive('baseConfirmation',
function($modal) {
var confirmModal = function(theScope) {
return $modal.open({
templateUrl: '../confirm_modal.html',
scope: theScope,
backdrop: false
});
}
return {
templateUrl: ,
restrict: "AE",
scope: {
'iconAttribute': "@",
},
controller: function($scope, $element, $attrs) {
var modalInstance;
$scope.commentBox = {};
function modalWork() {
modalInstance.result.then(function() {
//if promise is fullfilled
console.log($scope.commentBox.text);
}, function() {
//if promise is deferred/rejected
console.log("Canceled")
})
.finally(function() {
$scope.commentBox.text = "";
});
}
$scope.cancel = function() {
modalInstance.dismiss();
modalWork();
}
$scope.ok = function() {
modalInstance.close();
modalWork();
}
$element.on("click", function(event) {
modalInstance = confirmModal($scope);
});
}
}
});
答案 0 :(得分:1)
这将非常难以做到 - 您需要处理的不仅仅是指令不是一个简单的对象。还有一个涉及的缓存层可能会破坏你所做的事情,即使你把它连接起来。
Pawel Gerr最近发表了一篇关于创建“动态指令”的有趣技术的博客,他在帖子中提供了解决这些问题的方法,以及一个说明他的技术的jsFiddle。我在自己的项目(他的技术或你的技术)中做这样的事情并不舒服,因为当你开始研究这样的框架并消除他们的核心理念时,你永远不会知道哪个即将发布的版本会破坏你的代码。我实际上认为指令继承是一个非常好的答案,你将来不会有一把剑悬挂在你的手上......但如果你决心这样做,那绝对是一个有趣的读物! :)
http://weblogs.thinktecture.com/pawel/2014/07/angularjs-dynamic-directives.html