我有一个非常直观的AngularJS问题,但似乎找不到答案:
当同时使用controllerAs和bindToController选项时,如何在指令控制器中使用$scope.$watch()?
如果需要澄清我的意思,请告诉我。
当同时使用controllerAs和bindToController选项时,如何在指令控制器中使用$scope.$watch()?
如果需要澄清我的意思,请告诉我。
好的,$scope.$watch
监听 表达式
,因此假设您将控制器绑定到名称 vm
(例如 controllerAs: 'vm'
),则应该使用
$scope.$watch('vm.somethingToWatch', function(newval, oldval) {...})
您仍需要注入$scope
,因为单独的控制器实例上没有$watch
可用。
$scope
,我需要使用$injector
还是只需在控制器中包含它?(例如controller: function($scope) {
) - Dean Zaslow$scope.$watch
函数在控制器内部使用this
变量,我是否仍然会使用controllerAs
名称(例如vm
)? 即var self = this;
self.total = someCode;
$scope.$watch('self.total', function()
与$scope.$watch('vm.total', function()
- Dean Zaslowfunction($scope)
。对于后一个问题,表达式会像在模板内部一样进行评估,所以是vm.total
:) - ArtoAlebindToController
之外,是否没有不涉及作用域的Angular方法可以做到这一点? - rinogobindToController
有两个主要原因:一是让类式控制器能够很好地工作,更重要的是始终保证在Angular模板中使用“.”,确保您不会遇到作用域继承方面的麻烦。这并不意味着处理作用域现在被延迟到了控制器,所有特定于作用域的方法仍然只能通过它来访问(例如scope.$apply
、scope.$watch
、scope.$broadcast
、scope.$on
等)。 - ArtoAle