2015-01-24 4 views
37

Wie Zugriff auf $scope von einem UI-Grid-Zelle Vorlage? Hier ist mein Controller-Code:AngularJS: Wie kann man aus der UI-Grid-Zellenvorlage auf den Bereich zugreifen?

app.controller('MainCtrl', ['$scope', function ($scope) { 

    // i want to reference this from a cell template. 
    $scope.world = function() { return 'world'; }; 

    $scope.gridOptions = { 
    data: [ 
     { id: "item1" }, 
     { id: "item2" } 
    ], 
    columnDefs: [ 
    { 
     field: 'id', 

     // world() is never called and is not displayed. 
     cellTemplate: '<div>{{ "hello " + world() }}</div>' 
    }] 
    }; 
}]); 

Sehen sie in Aktion hier: http://plnkr.co/edit/WYXeQShHWKDYDs4MIZnP?p=preview

Ich würde erwarten, Zellinhalte „Hallo Welt“ zu zeigen, aber sie zeigen nur „Hallo“.

Antwort

64

Gemäß http://ui-grid.info/docs/#/tutorial/305_appScope hat das Grid seinen eigenen isaloted-Bereich, daher müssen Sie grid.appScope verwenden, um auf Ihren Anwendungsbereich zuzugreifen. Die Lösung besteht darin, die Zellenvorlage zu ändern in:

cellTemplate: '<div>{{ "hello " + grid.appScope.world() }}</div>' 
+2

von FilterHeaderTemplate musste ich 'col.grid.appScope verwenden. .myFunction() ' – user2171669

+0

Was ist genau? In dem obigen Beispiel? –

+1

Ich kann nicht sicher sein, aber der Kommentar mit scheint für diejenigen Sinn, die die "Controller as" -Syntax verwenden. Wenn Sie Ihren Controller so eingerichtet haben, dass er als Alias ​​verfügbar ist (üblicherweise: Controller als vm), müssen Sie den Alias ​​in Ihre Kette aufnehmen, z. B .: grid.appScope.vm.myMethod(). HTH – FOR

Verwandte Themen