【问题标题】:Can I avoid using $scope and have user actions set AngularJS dirty bit?我可以避免使用 $scope 并让用户操作设置 AngularJS 脏位吗?
【发布时间】:2017-07-22 09:50:27
【问题描述】:

我在表单上有一个设置表(例如复选框),用户可以添加和删除表行。 theForm.$dirty 会在用户更改设置(例如,选中或取消选中复选框)时设置,但如果将行添加到表中或从表中删除,则不会设置。我有一个例子https://plnkr.co/edit/sOXFnZjpkrcExvxGsEVg

我是一个相对较新的 Angular 开发人员,但我被警告说,如果可以避免的话,引用 $scope 并不是最佳实践。我认为在这种情况下,我可以让控制器依赖$scope,然后在修改表的函数中调用$scope.theForm.$setDirty()。我不确定这是我唯一的办法还是有更好的方法。

【问题讨论】:

  • 无法查看您的 plnkr atm,但是您想知道表单是否脏的原因是什么?
  • 立即使用是启用或禁用保存按钮。
  • 有道理。接受的答案可以满足您的需要(将 $scope 排除在控制器之外),但您询问是否有“更好”的方法。您可以考虑询问您的模型是否脏,而不是/除了询问您的表单是否脏。我假设您的表 DOM 是由某种模型集合驱动的(对集合进行 ng-repeat)。如果是这样,您还可以将控制器方法(isModelDirty)绑定到 ng-disabled 并询问您的模型集合是否已更改。只是一个想法......

标签: javascript angularjs html-table dirty-data


【解决方案1】:

只需将表单放入控制器:

form name="vm.testForm"

但是如果控制器依赖于作用域也没什么不好。

【讨论】:

  • 如果您计划迁移到 Angular 2 或 4,那么最好不要使用 $scope。至少那是最初的阅读让我相信的。
  • 将控制器名称放在表单的name 中(在开头添加vm.)就是我想要的。谢谢,彼得!
猜你喜欢
  • 2010-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多