Angular.js-使用._extend()扩展基本指令 - 如何替换指令名称?

时间:2014-08-01 17:14:52

标签: angularjs underscore.js

我写了一个自定义基本指令。我将使用此基本指令用于其他指令...例如,我将为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);
            });
        }
     }
});

1 个答案:

答案 0 :(得分:1)

这将非常难以做到 - 您需要处理的不仅仅是指令不是一个简单的对象。还有一个涉及的缓存层可能会破坏你所做的事情,即使你把它连接起来。

Pawel Gerr最近发表了一篇关于创建“动态指令”的有趣技术的博客,他在帖子中提供了解决这些问题的方法,以及一个说明他的技术的jsFiddle。我在自己的项目(他的技术或你的技术)中做这样的事情并不舒服,因为当你开始研究这样的框架并消除他们的核心理念时,你永远不会知道哪个即将发布的版本会破坏你的代码。我实际上认为指令继承是一个非常好的答案,你将来不会有一把剑悬挂在你的手上......但如果你决心这样做,那绝对是一个有趣的读物! :)

http://weblogs.thinktecture.com/pawel/2014/07/angularjs-dynamic-directives.html