我正在尝试创建一个获取属性的简单指令,并在指令
中显示它这是指令男女同志:
angular.module('JJJ')
.directive('jobCard', function () {
return {
template: '<div>name: {{job}}</div>',
restrict: 'E',
scope:{
job: "=j"
},
link: function postLink(scope, element, attrs) {
}
};
});
html用法:
<job-card ng-repeat="j in jobs" job="j.name"></job-card>
指令没有显示任何内容。那是为什么?
答案 0 :(得分:2)
通过将范围变量job
定义为=j
,您告诉Angular要查找名为j
的属性。
隔离范围的工作原理是在隔离范围(ex job
)中定义属性的名称,然后将其设置为绑定设置(例如=
是双向的)。为了命名属性,您可以将属性的名称附加到绑定设置的末尾(例如=myAttribute
将查找名为myAttribute
的属性,并在指令的scope属性上设置值job
)。
angular.module('JJJ')
.directive('jobCard', function () {
return {
template: '<div>name: {{job}}</div>',
restrict: 'E',
scope:{
job: "="
},
link: function postLink(scope, element, attrs) {
}
};
});
答案 1 :(得分:1)
scope: {
job: "=j"
}
这意味着用属性j
引用的外部范围变量设置为双向数据绑定到内部范围变量job
。
angular.module('JJJ')
.directive('jobCard', function () {
return {
template: '<div>name: {{job}}</div>',
scope:{
job: "="
},
link: function postLink(scope, element, attrs) {
}
};
});
答案 2 :(得分:0)
如果只想显示外部作用域中的值(例如,此指令位于控制器中且作业用于控制器中),请在指令的作用域对象中使用“@”而不是“=”。正如llan所指出的,'='是一种双向绑定,如果在指令范围内更改了值,则更新外部作用域中的值。例如,在您的示例中,更改link函数中job的值也将更改外部作用域(在控制器中)中的作业。