Angularjs 无法在自定义指令中绑定ng repeat值?

Angularjs 无法在自定义指令中绑定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){

我已经创建了名为displayId的自定义指令。使用ng repeat呈现的自定义指令和来自ng repeat数据的绑定id。不幸的是,无法在自定义指令中获取元素的id

    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>