Angularjs ng-click内部ng-repeat不起作用

时间:2015-12-22 03:01:34

标签: javascript jquery angularjs

我正在研究使用angularjs的概念验证。我必须在我使用ng-click的链接上使用单击功能。此ng-click位于ng-repeat内。我在stackoverflow中经历了如此多的解决问题,关于如何在ng-repeat中使用ng-click。但不知何故,这些解决方案都没有奏效。有人可以帮我指出我在做错的地方吗?

HTML Code :

<collection collection='tasks'></collection>
<collection collection='articleContent'></collection>   

app.directive('collection', function () {
    return {
        restrict: "E",
        replace: true,
        scope: {
            collection: '='
        },
        template: "<ul><member ng-repeat='member in collection' member='member'></member></ul>"
    }
});

app.directive('member', function ($compile) {
    return {
        restrict: "E",
        replace: true,
        scope: {
            member: '='
        },
        template: "<li><a href='#' ng-click='getArticleContent(member.itemId)'>{{member.title}}</a></li>",
        link: function (scope, element, attrs) {
            if (angular.isArray(scope.member.tocItem)) {
                if(scope.member.hasChildren == "true")
                    {
                    for(var i=0;i<scope.member.tocItem.length;i++){
                        if(scope.member.tocItem.title) {
                         scope.member.tocItem.title.hide = true;
                        }
                        }
                    }
                element.append("<collection collection='member.tocItem'></collection>"); 
                $compile(element.contents())(scope)
            }
        }
    }
});

app.controller('AbnTestController', function($scope) {
    var bookId ="";
    $scope.tasks = data;

    $scope.getArticleContent = function(itemId){
        alert('inside article content');
        $scope.articleContent = articleData[0].articleContent;
    }
});

点击链接后,此处永远不会调用getArticleContent方法。

1 个答案:

答案 0 :(得分:1)

指令成员拥有自己的范围,意味着孤立的范围。 模板有一个ng-click来执行getArticleContent,即member指令不包含getArticleContent函数。

您有两种选择:

  1. 将getArticleContent函数添加到指令成员。
  2. 创建没有隔离范围的成员指令。 但是存在这方面的问题,具有相同指令的两个实例可能会导致冲突。
  3. OP评论后更新:

    我正在添加OP代码,其中一些数据传递给指令进行操作:

    if (i < s2.length - 1)

    如果OP可以创建一个供我们审阅和修改的jsfiddle,那将会更有帮助。