当我以下列方式在控制器中使用 gridapi 时有什么区别?
What is the difference when I use gridapi in the controller in following way?
- vm.gridApi = gridApi 其中 vm = this 和
- $scope.gridApi = gridApi 中
onRegisterApi 函数?
按照下面的方式使用是否正确?
vm = this;
vm.gridOptions.onRegisterApi = function (gridApi) {
vm.gridApi = gridApi;
gridApi.edit.on.afterCellEdit(null, function (rowEntity, colDef, newValue, oldValue) {
if (newValue != oldValue) {
rowEntity.isDirty = colDef.name;
// $scope.$apply(); <-- can't use this with vm
vm.gridApi.core.notifyDataChange(uiGridConstants.dataChange.COLUMN);
}
});
};
我想用vm,因为我想跟这个angular style guide。
注意:要使用 $scope,我必须在控制器中注入 $scope。
各有各的用处。首先,一些历史......
$scope 是 "classic" 技术,而 "controller as" 是最近的技术(从 1.2.0 正式版本开始,尽管它确实出现在在此之前的不稳定的预发布版本中)。
两者都运行良好,唯一错误的答案是在没有明确原因的情况下将它们混合在同一个应用程序中。坦率地说,混合使用它们会起作用,但只会增加混乱。所以选择一个并滚动它。最重要的是保持一致。
哪一个?这取决于你。 $scope 的例子还有很多,但是 "controller as" 也在加速发展。这个比那个好吗?这是有争议的。那么如何选择呢?
舒适
我更喜欢 "controller as" 因为我喜欢隐藏 $scope 并通过中间对象将成员从控制器公开到视图。通过设置 this.*,我可以将我想从控制器中公开的内容公开到视图中。您也可以使用 $scope 来做到这一点,我只是更喜欢为此使用标准 JavaScript 。事实上,我是这样编码的:
var vm = this;
vm.title = 'some title';
vm.saveData = function(){ ... } ;
return vm;
这让我感觉更干净,并且可以轻松查看视图中显示的内容。请注意,我将变量命名为 return "vm" ,它代表视图模型。这只是我的惯例。
使用 $scope 我可以做同样的事情,所以我不会增加或减少该技术。
现在补充几点:
- $scope 在 Angular 2.0 中被删除。因此,随着 Angular 2.0 发布日期的临近,使用这种方法将成为其他人想要遵循的方法。
- Angular 文档明确告诉您建议使用它。那,除了 $scope 被删除这一事实之外,这足以让我从不使用 $scope。
- 这更具可读性
简答:
this
调用controller构造函数时,this就是controller。
当调用 $scope 对象上定义的函数时,这是 "scope in effect when the function was called"。这可能(也可能不是!)是定义函数的 $scope。所以,在函数内部,this 和 $scope 可能不一样。
$scope
每个控制器都有一个关联的 $scope 对象。
控制器(构造函数)函数负责在其关联的 $scope 上设置模型属性和 functions/behavior。
只能从 HTML/view 访问在此 $scope 对象(和父范围对象,如果原型继承正在发挥作用)上定义的方法。例如,来自 ng-click、过滤器等
谢谢和干杯[=47=]
- vm.gridApi = gridApi 其中 vm = this 和
- $scope.gridApi = gridApi 中 onRegisterApi 函数?
按照下面的方式使用是否正确?
vm = this;
vm.gridOptions.onRegisterApi = function (gridApi) {
vm.gridApi = gridApi;
gridApi.edit.on.afterCellEdit(null, function (rowEntity, colDef, newValue, oldValue) {
if (newValue != oldValue) {
rowEntity.isDirty = colDef.name;
// $scope.$apply(); <-- can't use this with vm
vm.gridApi.core.notifyDataChange(uiGridConstants.dataChange.COLUMN);
}
});
};
我想用vm,因为我想跟这个angular style guide。 注意:要使用 $scope,我必须在控制器中注入 $scope。
各有各的用处。首先,一些历史......
$scope 是 "classic" 技术,而 "controller as" 是最近的技术(从 1.2.0 正式版本开始,尽管它确实出现在在此之前的不稳定的预发布版本中)。
两者都运行良好,唯一错误的答案是在没有明确原因的情况下将它们混合在同一个应用程序中。坦率地说,混合使用它们会起作用,但只会增加混乱。所以选择一个并滚动它。最重要的是保持一致。
哪一个?这取决于你。 $scope 的例子还有很多,但是 "controller as" 也在加速发展。这个比那个好吗?这是有争议的。那么如何选择呢?
舒适
我更喜欢 "controller as" 因为我喜欢隐藏 $scope 并通过中间对象将成员从控制器公开到视图。通过设置 this.*,我可以将我想从控制器中公开的内容公开到视图中。您也可以使用 $scope 来做到这一点,我只是更喜欢为此使用标准 JavaScript 。事实上,我是这样编码的:
var vm = this;
vm.title = 'some title';
vm.saveData = function(){ ... } ;
return vm;
这让我感觉更干净,并且可以轻松查看视图中显示的内容。请注意,我将变量命名为 return "vm" ,它代表视图模型。这只是我的惯例。
使用 $scope 我可以做同样的事情,所以我不会增加或减少该技术。
现在补充几点:
- $scope 在 Angular 2.0 中被删除。因此,随着 Angular 2.0 发布日期的临近,使用这种方法将成为其他人想要遵循的方法。
- Angular 文档明确告诉您建议使用它。那,除了 $scope 被删除这一事实之外,这足以让我从不使用 $scope。
- 这更具可读性
简答:
this
调用controller构造函数时,this就是controller。 当调用 $scope 对象上定义的函数时,这是 "scope in effect when the function was called"。这可能(也可能不是!)是定义函数的 $scope。所以,在函数内部,this 和 $scope 可能不一样。
$scope
每个控制器都有一个关联的 $scope 对象。 控制器(构造函数)函数负责在其关联的 $scope 上设置模型属性和 functions/behavior。 只能从 HTML/view 访问在此 $scope 对象(和父范围对象,如果原型继承正在发挥作用)上定义的方法。例如,来自 ng-click、过滤器等
谢谢和干杯[=47=]