Javascript 带有自定义属性的angularjs自定义指令

Javascript 带有自定义属性的angularjs自定义指令,javascript,angularjs,angularjs-directive,angularjs-scope,Javascript,Angularjs,Angularjs Directive,Angularjs Scope,我是angularjs的新手,我不知道这是否可行,如果可能的话如何实现。 我想创建一个带有控制器的自定义指令,该控制器使用通过属性传递给它的信息。这是我想要实现的一个非工作示例: HTML应该如下所示: <div ng-app="test"> <custom-directive attr1="value1" attr2="value2"></custom-directive> </div> expect控制台输出应为: 打印属性值:值1、

我是angularjs的新手,我不知道这是否可行,如果可能的话如何实现。 我想创建一个带有控制器的自定义指令,该控制器使用通过属性传递给它的信息。这是我想要实现的一个非工作示例:

HTML应该如下所示:

<div ng-app="test">
    <custom-directive attr1="value1" attr2="value2"></custom-directive>
</div>
expect控制台输出应为:

打印属性值:值1、值2

有什么想法吗?
谢谢

在指令中,您可以定义要访问和使用的范围对象(属性),如下所示:

app.directive("customDirective", function(){
    return {
        restrict: 'E',
        scope: {attr1: "=", attr2: "="},
        link: function(scope, elem, attr){
            console.log("print attributes value: " + attr.attr1 + ", " +  attr.attr2 );
        }
    };
您可以使用不同类型的绑定:

  • =用于双向绑定
  • @只读取值(单向绑定)
  • &用于绑定函数
有关更多信息,请参阅以下链接:
指令可能会变得相当复杂。知道你的最终目标会有更好的答案,但这是实现你要求的最简单的方法:

var app = angular.module('test', []);
app.directive("customDirective", function(){
    return {
        link: function(scope, el, attr){
            console.log("print attributes value: " + attr.attr1 + ", " +  attr.attr2 );
        }
    }
});

进一步看,我找到了解决问题的可能方法。它与Plunker提出的方法非常相似,只是在语法上有细微的变化。这一条对我有效,但我不明白为什么普朗克提出的建议不起作用

app.directive('customDirective', function(){
    return {
        compile: function() {
            return {
                pre: function(scope, element, attributes) {
                    console.log("Value: " + attributes.attr1 + attributes.attr2);
                }
            };
        }
    }
});

当我尝试执行您的代码时,我得到以下错误:错误:未定义范围。我尝试将作用域作为参数控制器传递:函数(作用域、元素、属性){..},但不起作用。你是对的,我刚刚更新了我的示例,现在应该可以了。我忘记了将“attr”传递给link函数,然后以这种方式访问属性。请注意,我正在使用link函数进行输出,它应该是“restrict:'E'”而不是“restrict='E'”。当我执行代码时,控制台中不会出现任何内容,也不会出现错误。@narcispr您使用的是什么版本的angular?你试过普朗克吗?这很有效。。。
app.directive('customDirective', function(){
    return {
        compile: function() {
            return {
                pre: function(scope, element, attributes) {
                    console.log("Value: " + attributes.attr1 + attributes.attr2);
                }
            };
        }
    }
});