Typescript AngularJs$scope.vm模式

Typescript AngularJs$scope.vm模式,angularjs,typescript,Angularjs,Typescript,我将Typescript与AngularJs一起使用,并使用以下模式: $scope.vm = this; 然后在类中添加属性和方法。然而,我突然想到,当我需要访问一个服务时,我将它作为类上的一个属性,然后将它添加到我的作用域中,这使得我的作用域可能非常大。我的理解是,我们希望控制器的作用域保持较小。由于angular使用脏检查,这难道不意味着在我拥有的任何服务上发生任何更改时,整个作用域(控制器类)都将被重新处理吗 所以我的问题是,我是否偏离了底线,这不是什么大问题 如果是问题,其他人是如何

我将Typescript与AngularJs一起使用,并使用以下模式:

$scope.vm = this;
然后在类中添加属性和方法。然而,我突然想到,当我需要访问一个服务时,我将它作为类上的一个属性,然后将它添加到我的作用域中,这使得我的作用域可能非常大。我的理解是,我们希望控制器的作用域保持较小。由于angular使用脏检查,这难道不意味着在我拥有的任何服务上发生任何更改时,整个作用域(控制器类)都将被重新处理吗

所以我的问题是,我是否偏离了底线,这不是什么大问题

如果是问题,其他人是如何解决的

谢谢

我们的理解是,我们希望控制器的作用域保持较小。由于angular使用脏检查,这难道不意味着在我拥有的任何服务上发生任何更改时,整个作用域(控制器类)都将被重新处理吗


不。角度只会区分你绑定或观看的内容。没有人在看服务上的东西

尝试将控制器声明为类,并使用
this
controllerAs

$scope.vm模式之所以有用,是因为
这个
可以绑定到Javascript中的不同内容,特别是当“类”完全在构造函数中声明时。当您使用controllerAs变量调用Typescript类的方法时,这通常不是问题,因为
定义得非常好

编辑:

《角度风格指南》解释了为什么
vm
是必要的,即
这一困惑


您不需要在TypeScript中使用它,因为
这个
的语义非常清楚,在需要传递函数引用的情况下,您可以使用lambdas(
(…)=>…
)来捕获
这个

嗯,这与我对脏检查的解释相矛盾,您的说法听起来像是可观察的,只有你绑定的东西才会被观察到。我很困惑,或者好像每次都会重新评估范围内所有被绑定或监视的东西,而像击倒这样的可观察系统只会评估一个可观察的?所以我只需要不要绑定太多的东西,这听起来对吗?只有绑定的东西是脏的。这不同于“只观察有界的东西”。此外,Angular默认情况下不会深入检查范围成员。为了明确起见,我不需要太担心范围会变大,但会越来越大,因此我绑定(或查看)的内容的数量会同意吗?是的。确切地搞定了。嗯,我的控制器是一个类。我不太明白你的意思,你能给我举个例子吗?代码。我不明白这个解决方案如何阻止我的服务被添加到范围中,除非在范围中明确添加我做的和不想做的,当然我可以这样做,但我不想!)听起来我需要注意的是我绑定的东西的数量,并且不必担心范围太大。我的观点可以总结为尽量避免
$scope
controllera
vm
模式的存在不是为了阻止您访问
$scope
,而是为了让您的生活更轻松。(Angular的作者已经为发明它而道歉,它在2.0中不存在,所以避免它是一个好主意。)是的,我同意,并将使用控制器,作为前进的方向,范围是lamesville