简体   繁体   中英

ng-click on ng-repeat in a directive

I am new to AngualrJS and I am having trouble getting a ng-click working inside a ng-repeat that sits inside a directive.

I use ng-repeat to display a list of PDFs and currently just trying to be able to click them to pop up an alert window. But I don't seem to be able to get any ng-click working within the directive.

The Angular code:

var app = angular.module("aria", []);

app.directive("rdnglist", function(){
    return {
        restrict: 'E',
        templateUrl: "rdnglist.html",
        controller: function(){
            this.pdfs = pdflist;
            this.test = function() {
                $window.alert("hi");
            };
        },
        controllerAs: "plist",
    };
});`

The HTML:

<div class="fullsect">
<div class="pdflist" ng-repeat="pdf in plist.pdfs">
    <h3>{{pdf.name}}</h3>
        <img ng-src="{{pdf.image}}" ng-click="test()"/>
        <p>Class: {{pdf.class}}</p>
    <div id="commentNo">{{pdf.comments}}</div>
</div>
<div class="pdflist">
    <h3>New File</h3>
    <a ng-click="test()">Open</a>
    <img src="/pictures/addnew.png"/>
</div>

I assume it has something to do with the scope of the controller but I'm unsure. As I'm new, I learned to use ControllerAs over $scope , is this the issue?

Here is a working plunker based on your code.

I changed the directive to inject $window ... see ['$window, function($window) to make the alert work. I also initialize with dummy data: The app:

var app = angular.module('plunker', []);

app.directive("rdnglist", ['$window', function($window){
    return {
        restrict: 'E',
        templateUrl: "rdnglist.html",
        controller: function(){
            this.pdfs = [{'name':'abc'}];
            this.test = function() {
                $window.alert("hi");
            };
        },
        controllerAs: "plist",
    };
}]);

app.controller('MainCtrl', function($scope) {
  $scope.name = 'World';
});

And the rdnglist.htm... as you are using ControllerAs, you need plist.test(). To reduce my work I hardcoded an AngularJS image:

<div class="fullsect">
<div class="pdflist" ng-repeat="pdf in plist.pdfs">
    <h3>{{pdf.name}}</h3>
        <a ng-click="plist.test()"><img ng-src="http://code-maven.com/img/angularjs.png" /></a>
        <p>Class: {{pdf.class}}</p>
    <div id="commentNo">{{pdf.comments}}</div>
</div>
<div class="pdflist">
    <h3>New File</h3>
    <a ng-click="test()">Open</a>
    <img src="/pictures/addnew.png"/>
</div>
</div>

index.html:

<!DOCTYPE html>
<html ng-app="plunker">

  <head>
    <meta charset="utf-8" />
    <title>AngularJS Plunker</title>
    <script>document.write('<base href="' + document.location + '" />');</script>
    <link rel="stylesheet" href="style.css" />
    <script data-require="angular.js@1.4.x" src="https://code.angularjs.org/1.4.9/angular.js" data-semver="1.4.9"></script>
    <script src="app.js"></script>
  </head>

  <body ng-controller="MainCtrl">
    <p>Hello {{name}}!</p>
    <rdnglist></rdnglist>
  </body>

</html>

let us know if that helps.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM