Angularjs 自定义指令在ng repeat中不起作用

Angularjs 自定义指令在ng repeat中不起作用,angularjs,Angularjs,大家好:这是我第一次在这里问问题 billWatch.HTML <ul class="border-and-bg vote-unordered-list bill-link-font"> <li><a ng-click='bill.yea = bill.yea + 1;ctrl.voteYea(1, bill.id, bill.yea)'>Yea</a>:{{bill.yea}} | <a ng-cli

大家好:这是我第一次在这里问问题

billWatch.HTML

        <ul class="border-and-bg vote-unordered-list bill-link-font">
            <li><a ng-click='bill.yea = bill.yea + 1;ctrl.voteYea(1, bill.id, bill.yea)'>Yea</a>:{{bill.yea}} | <a ng-click='bill.nay = bill.nay + 1; ctrl.voteYea(0, bill.id,bill.nay)'>Nay:{{bill.nay}}</a> | **<a ng-click="showComments()">{{filtered.length}} comments</a>**
            </li>
        </ul>


                    <div ng-mdoel='ctrl.commentsSection' ng-repeat='($index, comment) in ctrl.billComments | reverseComments | filter: comment.bill_id = bill.id as filtered' class="comments-container" >

                    <div>
                        <show-comment></show-comment>
                        <ul>

                            <li>{{comment.user_name}} | {{comment.comment}} </li>
                        </ul>

<!--                         <ul>
                            <li ng-bing-html>
                                <my-comment></my-comment>
                            </li>
                        </ul> -->
                    </div>
                </div>
showComment.dir.js

angular.module('ccApp')
    .directive('showComment', function(){

        function link(scope,element,attrs){

            scope.showComments = function(){

                console.log('showComment');
            }

        }
        return {
            restrict: 'EA',
            link:link
        };
    })
我省略了大部分控制器代码。我只想在控制台
中单击锚定标记的
时记录“showcoment”。它在
ng repeat
块外工作,但不在块内工作。有人能帮忙吗

谢谢

免责声明:
我们可以举一个小得多的例子,或者实际上建议使用不同的方法,但由于您似乎仍处于项目的“技术探索”阶段,我只想帮您解决您的问题。
:)


您遇到的问题是,传递到指令的
链接
功能的
范围
与您的
ng repeat
之外的范围不同
这是因为
ng repeat
指令为每个元素创建了一个新的
范围


如果要从
ng repeat
内将
函数showComments
附加到范围外的上,则必须在
链接中执行以下操作:

scope.$parent.showComments = function () {/*...*/};
而不是:

scope.showComments = function () {/*...*/};
但是,通过这种方式,您将为每个注释分配父级的
$scope.showcoments
函数。一次就够了

因此,我建议您只需将
元素拉到
ng repeat
之外。该指令将附加到其容器的
范围
,并将正确设置
showcoments
功能,只要设置一次即可


查看下面的工作片段,我只想:

  • 连接了你给我们的所有代码
  • 元素向上移动
angular
.module('ccApp',[])
.controller('BillWatchCtrl',函数BillWatchCtrl(){
})
.directive('showcoment',function(){
功能链接(范围、元素、属性){
scope.showComments=函数(){
log('显示注释…');
}
}
返回{
限制:“EA”,
链接:链接
};
})

  • 是:{{bill.Yea}}否:{{bill.Nay}}否:{filtered.length}评论**
  • {{comment.user_name}}{{comment.comment}}

欢迎使用堆栈溢出!您可以通过格式化代码以提高可读性和消除滚动来改进您的问题。为了吸引更多愿意帮助您的用户,我建议您更清楚地说明您的问题,不仅说明您想要什么,而且说明当前代码的问题。也许你还可以进一步减少它,创建一个。ng Repet是否至少呈现了一条注释,我的意思是我的过滤器不会输出任何注释?
scope.showComments = function () {/*...*/};