如何将数据作为属性本身的值传递给自定义指令?
How do you pass in data to custom directives as a value of the attribute itself?
我有一个这样定义的指令:
angular.module("main.directives").directive("todo", function() {
return {
restrict: "A",
scope: {
todo: "=entity"
},
replace: false,
templateUrl: "todo.html",
link: function(scope, element, attributes) {
}
};
});
我在模板中这样使用:
<div todo entity="todoData"></div>
todoData
来自控制器或其他一些本地范围。无论如何,这一切都像一个魅力,太酷了!
我的问题如下:我该如何修改指令定义,以便它也适用于这种类型的标记:
<div todo="todoData"></div>
如您所见,数据现在作为标记指令的属性值传入。就像 ng-
指令一样:
<p ng-repeat="bit in data"></p>
<p ng-click="whatever()"></p>
如何实现?
谢谢
替换
scope: {
todo: "=entity"
},
来自
scope: {
todo: "=todo"
},
或者干脆
scope: {
todo: "="
},
您必须自己评估属性的值。隔离作用域不是我最喜欢的指令作用域之一。相反,您可以使用 scope = true 从父控制器继承。这将允许您使用父作用域中公开的所有变量。
在你的情况下。
angular.module("main.directives").directive("todo", function() {
return {
restrict: "A",
scope: true,
replace: false,
templateUrl: "todo.html",
link: function(scope, element, attributes) {
scope.todo = scope.$eval(attributes[todo]);
}
};
});
现在可以使用您的 todo 指令了。与任何其他 ng- 指令一样。
示例:
<div todo="getTodoList()"></div>
<div todo="[{description:'hahahha'}]"></div>
当您在 angularjs 中编写属性指令时,您可能希望它由属性值提供。
例如,像这样:
<div my-attribute="somevalue"></div>
那么你如何创建一个接受它的新范围?这并不明显。以下是您的操作方法:
app.directive('myAttribute', function() {
return {
restrict: 'A',
scope: {
myAttribute: '='
},
template: '<div style="font-weight:bold">{{ myAttribute | number:2}}</div>'
};
});
需要注意的技巧是 "self attribute" 因为属性名称采用驼峰式大小写。
我有一个这样定义的指令:
angular.module("main.directives").directive("todo", function() {
return {
restrict: "A",
scope: {
todo: "=entity"
},
replace: false,
templateUrl: "todo.html",
link: function(scope, element, attributes) {
}
};
});
我在模板中这样使用:
<div todo entity="todoData"></div>
todoData
来自控制器或其他一些本地范围。无论如何,这一切都像一个魅力,太酷了!
我的问题如下:我该如何修改指令定义,以便它也适用于这种类型的标记:
<div todo="todoData"></div>
如您所见,数据现在作为标记指令的属性值传入。就像 ng-
指令一样:
<p ng-repeat="bit in data"></p>
<p ng-click="whatever()"></p>
如何实现?
谢谢
替换
scope: {
todo: "=entity"
},
来自
scope: {
todo: "=todo"
},
或者干脆
scope: {
todo: "="
},
您必须自己评估属性的值。隔离作用域不是我最喜欢的指令作用域之一。相反,您可以使用 scope = true 从父控制器继承。这将允许您使用父作用域中公开的所有变量。
在你的情况下。
angular.module("main.directives").directive("todo", function() {
return {
restrict: "A",
scope: true,
replace: false,
templateUrl: "todo.html",
link: function(scope, element, attributes) {
scope.todo = scope.$eval(attributes[todo]);
}
};
});
现在可以使用您的 todo 指令了。与任何其他 ng- 指令一样。
示例:
<div todo="getTodoList()"></div>
<div todo="[{description:'hahahha'}]"></div>
当您在 angularjs 中编写属性指令时,您可能希望它由属性值提供。 例如,像这样:
<div my-attribute="somevalue"></div>
那么你如何创建一个接受它的新范围?这并不明显。以下是您的操作方法:
app.directive('myAttribute', function() {
return {
restrict: 'A',
scope: {
myAttribute: '='
},
template: '<div style="font-weight:bold">{{ myAttribute | number:2}}</div>'
};
});
需要注意的技巧是 "self attribute" 因为属性名称采用驼峰式大小写。