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" };
}
})();
答案 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
顺便说一句,为防止混淆,您应该使用相同的变量名称来引用控制器实例,我的意思是vm
和mc
。
答案 1 :(得分:1)
虽然有点晚,但我找到了解决此问题的方法,需要为$scope.myData
和vm.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" };