Angularjs 无法在自定义指令中绑定ng repeat值?
我已经创建了名为displayId的自定义指令。使用ng repeat呈现的自定义指令和来自ng repeat数据的绑定id。不幸的是,无法在自定义指令中获取元素的idAngularjs 无法在自定义指令中绑定ng repeat值?,angularjs,angularjs-directive,angularjs-ng-repeat,Angularjs,Angularjs Directive,Angularjs Ng Repeat,我已经创建了名为displayId的自定义指令。使用ng repeat呈现的自定义指令和来自ng repeat数据的绑定id。不幸的是,无法在自定义指令中获取元素的id app.directive('displayId', function(){ return { restrict: 'EA', compile: function(element){
app.directive('displayId', function(){
return {
restrict: 'EA',
compile: function(element){
alert(element.attr("id")); //id displaying as op.id
}
};
});`
请在下面找到可复制的plnkr问题
任何人请向我推荐解决方案。使用
编译->发布
app.directive('displayId', function(){
return {
restrict: 'EA',
compile: function(){
return {
pre: function ($scope, $elm, $attrs) {
},
post: function ($scope, $elm, $attrs, controllers) {
console.log($attrs.id);
}
}
}
};
});
您可以在指令中传递作用域,如使用指令的链接函数
这个
{{op.id}}
var-app=angular.module(“myApp”,[]);
应用控制器(“cntrl”,功能($scope){
$scope.options=[
{'id':'Title1','label':'Zip code','type':'xxx'},
{'id':'Title2','label':'MD','type':'title1'},
{'id':'Title3','label':'DMS','type':'title2'}
];
})
app.directive('displayid',function(){
返回{
限制:“EA”,
范围:{
id:“@id”
},
链接:函数(范围、元素、属性){
console.log(scope.id);
}
};
});
我猜compile方法在解析呈现HTML之前,因此该值是在dom中任何返回更改之前在指令中使用的语法<代码>注意:postLink函数中的compile函数$compile强制编译指令的模板,而不是依赖于通过template或templateUrl声明自动编译模板,或在compile函数中手动编译代码>是的,我是用post方法得到的。在sample controller中编译ng repeat模板的任何其他方法都不是在custom指令中。@Kbvin好的,我想我已经回答了您发布的问题。关于第二个问题——关于你想要实现什么。我会问不同的问题SO@maxin我可以使用$attrs.id获取id,但当我访问元素时,它还没有编译。如何手动编译?我得到的元素像
,但我需要像
@Kbvin这样的元素很难在评论中解释,请用详细信息打开新问题并在这里发布链接。谢谢你
<body ng-app="myApp" ng-controller="cntrl">
<div ng-repeat="op in options">
<p>{{op.id}}</p>
<div displayid id={{op.id}} > </div>
</div>
<script>
var app = angular.module("myApp", []);
app.controller("cntrl",function($scope){
$scope.options = [
{'id' : 'Title1', 'label' : 'Zip code', 'type' : 'xxx' },
{'id' : 'Title2', 'label' : 'MD', 'type' : 'title1'},
{'id' : 'Title3', 'label' : 'DMS', 'type' : 'title2'}
];
})
app.directive('displayid', function(){
return {
restrict: 'EA',
scope:{
id:'@id'
},
link: function(scope,element,attrs){
console.log(scope.id);
}
};
});
</script>
</body>