ng-grid with" controller as"句法

时间:2014-08-08 19:27:25

标签: angularjs ng-grid

This GitHub issue说不,但是在遵循Angular的“控制器为”语法时可以使用ng-grid吗?

更新

以下是ng-grid site上的基本示例:

http://plnkr.co/edit/lBgeAf?p=preview

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

以下是我使用基本示例尝试“controler as”语法:

http://plnkr.co/edit/fI00U1?p=preview

(function() {

  angular.module('myApp', ['ngGrid']);
  angular.module('myApp').controller('MyCtrl', MyCtrl);

  function MyCtrl() {
    var vm = this;
    vm.myData = [{name: "Moroni", age: 50},
                     {name: "Tiancum", age: 43},
                     {name: "Jacob", age: 27},
                     {name: "Nephi", age: 29},
                     {name: "Enos", age: 34}];
    vm.gridOptions = { data: "myData" };
  }

})();

3 个答案:

答案 0 :(得分:4)

实际上,controller as语法只是将控制器实例分配到其自己的$scope中的简写,因此MyCtrl as mc将等同于以下内容:

function MyCtrl($scope) {
    $scope['mc'] = this;
}

因此,您可以将gridOptions更改为:

vm.gridOptions = { data: "mc.myData" };

示例plunker: http://plnkr.co/edit/S4wyfB?p=preview

顺便说一句,为防止混淆,您应该使用相同的变量名称来引用控制器实例,我的意思是vmmc

答案 1 :(得分:1)

虽然有点晚,但我找到了解决此问题的方法,需要为$scope.myDatavm.myData分配数据数组,如下所示:

$scope.myData = vm.myData = [{name: "Moroni", age: 50}, ...];

由于数组是复合数据类型,这意味着作用域上的属性存储对该对象的引用。因此,您仍然可以使用控制器中的controller as语法来操作数据,并确保$ scope.myData也会更新。

这是你plunker的一个分支,表明它有效。

注意:在ngGrid v.3.0(尚未发布)中,controller as语法正常运行,并且不需要任何黑客攻击。

答案 2 :(得分:0)

你必须使用vm,如下所示

vm.gridOptions = { data: "vm.myData" };