【问题标题】:How to $apply() if not using $scope in Angular?如果在 Angular 中不使用 $scope,如何 $apply()?
【发布时间】:2016-10-10 18:01:37
【问题描述】:

在我的应用程序中,我使用 this 而不是 $scope 来保存变量和函数,并在 HTML 中使用控制器别名来访问。

在这种情况下,我该如何更新我的视图,例如 $digest() 或 $apply() of $scope?

或者是否需要注入$scope 来执行此操作?

【问题讨论】:

  • 您回避$scope的任何特殊原因?它用于视图和控制器之间的数据绑定。
  • 使用this与保存变量和函数无关。如果您使用 $scope,则变量数量将相同
  • @SterlingArcher 我并没有特别回避$scope,只是想放松一下@john_papa 风格指南(github.com/johnpapa/angular-styleguide/blob/master/a1/…)
  • @SterlingArcher 不一定如果使用controllerAs ...不需要为所有控制器注入它
  • 您应该问自己的问题是,“为什么我需要使用$digest() 或$apply()?”使用这些的需求应该非常少。

标签: javascript angularjs


【解决方案1】:

controllerAs 方式与控制器中的$scope 无关。这是一种避免$scope 与模板之间的接触并提高可读性的模式。然而,即使您使用controllerAs 语法,您也可以毫无问题地将$scope 注入您的控制器。这就是controllerAs 的意义所在,将$scope 用于诸如$scope.$apply 之类的适当任务,但不能用作视图模型。

即使您使用的是controllerAs,注入$scope 也不是一个坏习惯。但是,如果您使用$scope 像视图模型一样工作,那将是一个不好的做法。无论如何,即使你不注入,$scope 也会以某种方式存在于控制器内部,它是控制器的一部分。 controllerAs 的做法是将视图模型的角色与$scope 分开。最后,视图模型成为范围的一部分,但它与$scope 的其余功能隔离。

【讨论】:

  • 那么在这种情况下,注入$scope 只是为了更新我的观点是不是不好?
  • 即使您使用的是controllerAs,注入$scope 也不是一个坏习惯。但是,如果您使用 $scope 像视图模型一样工作,那将是一个不好的做法。
  • 非常感谢!
  • 没错!您应该针对我们在此处讨论的真正问题调整您的问题。
【解决方案2】:

@Lai32290 很好地采用了controllerAs 约定!它可以省去麻烦,并使用嵌套范围使事情变得更加清晰!至于您的问题,您不能避免使用$scope 来调用$digest 或$apply。请记住,尽管在幕后,angularjs 仍然将您的 controllerAs 附加到 $scope,所以它仍然存在。

当事件发生在 Angular 的生命周期之外时,您需要使用它 - 例如套接字或来自其他外部库的事件。

http://www.codelord.net/2015/11/11/angular-controlleras-when-should-you-use-scope/

【讨论】:

    猜你喜欢
    • 2013-02-13
    • 2016-08-31
    • 1970-01-01
    • 2017-07-12
    • 2015-10-29
    • 2014-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多