2014-02-27 8 views
9

ich will etwas tun, das ich weiß nicht, ob es möglich istEinsatz ng-Click-Ereignis in ng-grid

HTML

<!DOCTYPE html> 
    <html ng-app="myApp"> 
    <head lang="en"> 
     <meta charset="utf-8"> 
     <title>Custom Plunker</title> 
     <link rel="stylesheet" type="text/css" href="http://angular-ui.github.com/ng-grid/css/ng-grid.css" /> 
     <link rel="stylesheet" type="text/css" href="style.css" /> 
     <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js"></script> 
     <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.2/angular.min.js"></script> 
     <script type="text/javascript" src="http://angular-ui.github.com/ng-grid/lib/ng-grid.debug.js"></script> 
     <script type="text/javascript" src="main.js"></script> 
    </head> 
    <body ng-controller="MyCtrl"> 
     <div class="gridStyle" ng-grid="gridOptions"></div> 
    </body> 
</html> 

JS

// main.js 
var app = angular.module('myApp', ['ngGrid']); 
app.controller('MyCtrl', function($scope) { 
    $scope.myData = [{name: "Moroni", age: 50}, 
        {name: "Tiancum", age: 43}, 
        {name: "Jacob", age: 27}, 
        {name: "Nephi", age: 29}, 
        {name: "Enos", age: 34}]; 
    $scope.gridOptions = { data: 'myData', 
         cellTemplate:'<div class="ngCellText" ><a ng-click="foo()">{{row.getProperty(col.field)}}</a></div>' 
    } 
    $scope.foo = function() { 

     alert(''); 
    }; 
}); 

Ich möchte Setzen Sie ein ng-click-Event in eine Zeile in einem ng-Grid, ich habe mir die Idee angesehen, mich umzusehen, aber ich verstehe nicht wirklich, ob es möglich ist und wenn es so ist, ob das der richtige Weg ist. In diesem Code scheint das gut zu sein, startet die App nicht die Warnung, irgendwelche Vorschläge oder Ideen?

Hier ist der Plunker http://plnkr.co/edit/U6wdWTAV30HRhJk8xFPA?p=preview

+0

ya! es ist eine gute Idee –

+0

danke, aber es hat nicht funktioniert hast du eine Idee warum? hast du den Plunker versuchen? – mautrok

+0

Dies ist eine sehr späte Antwort auf diese Frage, aber ich arbeitete mit dem gleichen Problem. Das Beispiel in der Antwort von @mainguy hat das Problem mit dem click-Ereignis auf dem Eingabesteuerelement nicht wirklich angesprochen. Hier ist ein funktionierendes Beispiel. h. http://plnkr.co/edit/6IWa29ewYywLI1ghPgxe?p=preview – BigDubb

Antwort

7

Diese Definitionen für mich arbeiten:

$scope.gridOptions = { 
    data: 'myData', 
    columnDefs: [{ 
     field: 'name', 
     displayName: 'Name', 
     cellTemplate: '<div ng-click="foo()" ng-bind="row.getProperty(col.field)"></div>' 
     }, { 
     field: 'age', 
     displayName: 'Age', 
     cellTemplate: '<div ng-click="foo()" ng-bind="row.getProperty(col.field)"></div>' 
     } 

    ] 
    }; 

Ihre gegabelt Plunker here

+5

Die richtige Antwort ist die Verwendung von 'grid.appScope', wie hier erklärt: http://StackOverflow.com/a/33792526/492130 –

+1

Ja, ich weiß . Aber diese Frage war über ng-grid nicht ui-grid. Trotzdem danke, dass du darauf hingewiesen hast. – mainguy

+0

Richtig! Danke für die Aktualisierung. Ich habe vergessen zu erwähnen, dass "ng-grid" zugunsten von "ui-grid" veraltet ist. Wenn Sie also zu "ui-grid" wechseln können, sollten Sie sich bewegen und "grid.appScope" verwenden. –

10

Das Dokument auf ihrer Website Github wirklich alt ist.

Hier ist ein Link auf die richtige Seite für dieses Problem. http://ui-grid.info/docs/#/tutorial/305_appScope

 yourCtrl.gridOptions = { 
      enableFiltering: true, 
      enableHiding : false, 
      enableSorting: true, 
      appScopeProvider : yourCtrl, 
      rowTemplate: '<div ng-click="grid.appScope.doSomething(row)" ng-repeat="(colRenderIndex, col) in colContainer.renderedColumns track by col.uid" class="ui-grid-cell" ng-class="col.colIndex()" ui-grid-cell></div>', 
     }; 

     yourCtrl.doSomething = function(row) { 
      alert("lala"); 
     } 

ja, irgendwie

ng-click="grid.appScope.doSomething" 

wird nicht funktionieren

+0

Warum der Downvote? ausgewählte Antwort funktioniert nicht in der aktuellen Version von UI-Grid (ab September 2015) und meins tut. und Sie können immer das neueste Update von dem Link, den ich zur Verfügung gestellt habe. – KuN

6
$scope.ShowDetails=function(_obj) 
{ 
    alert('Hi! ' + _obj); 
} 

$scope.gridOptions = { 
    columnDefs: [ 
     { name: 'Search', field: 'Col1', cellTemplate: '<div ng-click="grid.appScope.ShowDetails(row)"><img src="/images/search.png" /></div>' }, 
     { name: 'Col2', displayName: 'Col2' }, 
    ]}; 

Hier ist das Beispiel, ein Ereignis zu einer ui Gitterzelle zu befestigen.