2015-01-24 8 views
37

Come si accede a $scope da un modello di cella griglia utente? Ecco il mio codice del controller:AngularJS: come accedere all'ambito dal modello di celle della griglia utente?

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>' 
    }] 
    }; 
}]); 

vederlo in azione qui: http://plnkr.co/edit/WYXeQShHWKDYDs4MIZnP?p=preview

mi aspetterei il contenuto delle celle per mostrare "ciao mondo", ma semplicemente mostrare "ciao".

risposta

64

In base a http://ui-grid.info/docs/#/tutorial/305_appScope, la griglia ha il proprio ambito di analisi in linea, quindi è necessario utilizzare grid.appScope per accedere all'ambito dell'applicazione. La soluzione è di cambiare il modello di cella in:

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

da filterHeaderTemplate Ho dovuto usare 'col.grid.appScope. .myFunction() ' – user2171669

+0

Che cos'è esattamente ? In base all'esempio sopra? –

+1

Non posso essere sicuro, ma il commento con sembra avere senso per quelli che usano la sintassi "Controller come". Quindi, se hai impostato il tuo controller come alias (comunemente: controller come vm), devi includere l'alias nella tua catena, ad es .: grid.appScope.vm.myMethod(). HTH – FOR

Problemi correlati