在其模板中使用Angular Directive属性

Maa*_*ten 23 javascript angularjs angularjs-directive

如何在指令中使用属性的值?我的元素看起来像这样:

<div class="tooltip-icon" 
  data-my-tooltip="click" 
  data-tooltip-title="foo" 
  data-tooltip-content="test content"></div>
Run Code Online (Sandbox Code Playgroud)

我想在我的指令模板中使用它,如下所示:

mainApp.directive('myTooltip',
    function() {

        // allowed event listeners
        var allowedListeners = ["click"];

        return {
            restrict: 'A',
            template:   '<div class="tooltip-title">...</div>' +
                        '<div class="tooltip-content">' +
                        '...</div>',
            link: function(scope, elm, attrs) {
                if(allowedListeners.indexOf(attrs.myTooltip) != -1){
                    elm.bind(attrs.myTooltip, function(){
                        ...
                    });
                }

            }
        };
    }
);
Run Code Online (Sandbox Code Playgroud)

三点的位置应该是代码,但我无法弄清楚如何将attrs对象(attrs.tooltipTitle等)的内容放入该模板中.

Bri*_*wis 33

您可以拉出属性并将它们放入指令的范围,如下所示:

angular.module('myApp', []).
directive('myTooltip', function ($log) {
    // allowed event listeners
    var allowedListeners = ["click"];
    return {
        restrict: 'A',
        template:   '<div class="tooltip-title">{{tooltipTitle}}</div>' +
                    '<div class="tooltip-content">' +
                    '{{tooltipContent}}</div>',
        scope: {
            tooltipTitle: '@tooltipTitle',
            tooltipContent: '@tooltipContent'
        },
        link: function (scope, elm, attrs) {
            if (allowedListeners.indexOf(attrs.myTooltip) != -1) {
                elm.bind(attrs.myTooltip, function () {
                    $log.info('clicked');
                });
            }

        }
    };
});
Run Code Online (Sandbox Code Playgroud)

这是小提琴:http://jsfiddle.net/moderndegree/f3JL3/