javascript - 当我通过以下方式在 Controller 中使用 gridapi 时有什么区别?

标签 javascript angularjs angular-ui-grid

  1. vm.gridApi = gridApi 其中 vm = this 和
  2. $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,我必须在 Controller 中注入(inject) $scope。

最佳答案

两者都有其用途。首先,一些历史......

$scope 是“经典”技术,而“controller as”则更新得多(从官方版本 1.2.0 开始,尽管它确实出现在之前不稳定的预发行版中)。

两者都工作得很好,唯一错误的答案是在没有明确原因的情况下将它们混合在同一个应用程序中。坦率地说,混合它们会起作用,但只会增加困惑。因此,选择一个并使用它。最重要的是保持一致。

哪一个?这取决于你。 $scope 的例子还有很多,但“controller as”也正在兴起。这个比那个好吗?这是有争议的。那么如何选择呢?

舒适

我更喜欢“controller as”,因为我喜欢隐藏 $scope 并通过中间对象将 Controller 中的成员暴露给 View 。通过设置 this.*,我可以将我想要从 Controller 公开的内容公开给 View 。你也可以使用 $scope 来做到这一点,我只是更喜欢使用标准 JavaScript 来实现这一点。事实上,我的代码是这样的:

var vm = this;

vm.title = 'some title';
vm.saveData = function(){ ... } ;

return vm;

这对我来说感觉更干净,并且可以轻松查看 View 中的内容。请注意,我将返回的变量命名为“vm”,它代 TableView 模型。这只是我的惯例。

使用 $scope 我可以做同样的事情,所以我不会添加或减少该技术。

现在还有一些要点:

  1. $scope 在 Angular 2.0 中被删除。因此,随着 Angular 2.0 发布日期的临近,使用这种方法将是其他人希望遵循的方法。
  2. Angular 文档明确告诉您建议使用它。除了 $scope 被删除这一事实之外,这也是我从不使用 $scope 的充分理由。
  3. 这更具可读性

简短回答:

this

当调用 Controller 构造函数时,这就是 Controller 。 当调用 $scope 对象上定义的函数时,这是“调用该函数时有效的范围”。这可能(也可能不是!)是定义函数的 $scope。所以,在函数内部,this 和 $scope 可能不一样。

$scope

每个 Controller 都有一个关联的 $scope 对象。 Controller (构造函数)函数负责在其关联的 $scope 上设置模型属性和函数/行为。 只有在此 $scope 对象(以及父范围对象,如果原型(prototype)继承正在发挥作用)上定义的方法才能从 HTML/ View 访问。例如,来自 ng-click、过滤器等。

感谢与干杯

关于javascript - 当我通过以下方式在 Controller 中使用 gridapi 时有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35915550/

相关文章:

javascript - iOS不同浏览器的具体用户代理字符串是什么

javascript - Angular ng-click、ng-mouseover 表达式和鼠标悬停

javascript - Angular UI Grid 重新加载单元格模板

javascript - 使用 ui.grid 与 cellTemplate 共享 $scope

javascript - 无法将 List 模块从 immutable.js 导入 Angular 2 项目

javascript - 如何引用外部 JavaScript 显示 Bootstrap 3 警报

javascript - 使用动态导入的 Webpack 拆分代码

javascript - 跨源策略错误

javascript - 嵌套的 ng-repeat-start/ng-repeat-end

angularjs - ui grid 将更新的单元格数据保存到数据库