angularjs – 何时直接使用$scope?
我刚刚开始使用Angular,并且已经阅读了很多教程.
现在 the free one at CodeSchool这是我的起点,根本没有提到$范围. 从我收集的内容中,controllerAs语法是相对较新的(1.2.0),但是似乎允许您直接使用$scope. 一些文章说“使用控制器”和解释,但大多数只是使用$范围.但是我找不到任何解释为什么选择它. 这是否现在主要是有利于一个人的情况,还是仍然有理由使用$范围? 即使许多新的指令插件也可以使用它,而不是允许您将其绑定到特定的控制器. 编辑:要澄清,我想知道什么时候使用$scope,不是不使用的原因:)
我可以给你的最好的答案是:
短: >每当您想要向模板公开逻辑时,使用范围. 长: 一个解释 范围或$范围,就像您所说的那样,是我们维护值(无论类型:函数,对象,字符串等)可用于该范围内的模板的位置.例如,考虑以下几点: HTML: <div ng-controller="MyCtrl"> <div>{{ message }}</div> </div> <div ng-controller="MyCtrl as ctrl"> <div>{{ ctrl.message }}</div> </div> 看到这些内插?那么,猜猜是什么?他们都访问范围. “控制器作为语法”为MyCtrl创建一个别名,并在本地作用域上发布.一旦元素被链接,如果你看到$scope,你将会发现一个暴露控件的属性ctrl. Javascript function MyCtrl($scope) { $scope.message = "controller MyCtrl"; this.message = "controller as syntax"; } 在哪里我使用MyCtrl这两个消息是可用的.但是要容易地访问控制器本身的值,我们使用“控制器作为别名”语法. 他们老实说是两种不同的方法.控制器作为*语法允许开发人员将控制器放在示波器上,更容易访问所述控制器.所以,最终都是在范围之上.否则,通过指令的链接功能,你必须访问控制器的require属性.控制器的方法和属性不一定需要暴露于模板,而只是在逻辑中使用. (此外,您还可以通过jqLit??e的data()函数访问控制器). 有时,当控制器传播到多个元素时,我们希望默认情况下可以使用该控制器的每个元素.这在创建指令时特别有价值.看看ngModel,看看我们有多种方法与使用ngModel的每个元素共同. 范围与控制器 要考虑的主要问题是子控制器可以继承其父级的范围.很酷的是,子范围将从父级继承父节点控制器属性的位. <!-- ctrl1 --> <div ng-controller="MyCtrl as ctrl1"> <div>{{ ctrl1.message }}</div> <!-- ctrl2 --> <div ng-controller="MyCtrl as ctrl2"> <div>{{ ctrl2.message }}</div> </div> </div> 请注意,两者都使用相同的控制器,但它们具有不同的别名.现在,控制器属性通过Scope传递给孩子.所以孩子可以通过它的别名访问父母.所以,通过这个语法,你可以清楚地看到MyCtrl的两个实例的分离.他们在他们的范围上都有一个消息属性,但它们很容易区分,而不需要通过父母,孩子,兄弟姐妹等进行挖掘. 结论是 如果要将值显示给模板使用范围.如果要将值绑定到不一定需要在模板中公开的元素,请使用控制器.如果您需要从模板中的控制器访问值,请使用控制器作为语法.将控制器用作*语法将控制器的值放置在语法中创建的别名下的范围上.因此,在这种情况下,您同时使用控制器和范围. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |