亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Angularjs“ Controller as”或“ $ scope”

Angularjs“ Controller as”或“ $ scope”

HUWWW 2019-12-04 10:12:36
我想知道angularjs中“ Controller as”或“ $ scope”語法之間的主要區別是什么。它們是否會對性能產生影響,如果可以,則首選哪種語法?!翱刂破鳛椤闭Z法肯定會提高代碼的可讀性,因為Knockout.js和其他JavaScript框架遵循相同的語法。$ scope將提供范圍繼承,有時會給我們帶來奇怪的行為,例如<div ng-controller="firstController"> ParentController: <input type="text" ng-model="parent"/>  <div ng-controller="secondController">    ChildController: <input type="text" ng-model="parent" />  </div></div>app.controller('ParentController', function ($scope) {  $scope.parent = "parentScope";}).controller('ChildController', function ($scope) { /*empty*/ }); a)最初child將獲得parent屬性,并且在我們更新父級時顯示“ parentScope”,child也將得到更新。但是,如果我們現在更改了child屬性,則更新父級不會修改child,因為它具有自己的scope屬性。b)如果我將控制器用作語法更改子節點,那么也會更新父節點。
查看完整描述

2 回答

?
牛魔王的故事

TA貢獻1830條經驗 獲得超3個贊

過去,我已經為這個問題寫了一些答案,它們基本上都歸結為同一件事。在Angular中$scope,即使沒有明確引用它,也正在使用。

ControllerAs語法使Angular可以幫助您編寫更高效,更容錯的控制器。在幕后,當您使用ng-controller="theController as ctrl"Angular theController$scope,將在上創建為屬性,并將其分配為ctrl?,F在,您有了要從作用域引用的對象屬性,并且可以自動免受原型繼承問題的影響。

從性能的角度來看,由于您仍在使用$scope,因此幾乎沒有性能差異。但是,由于您的控制器現在不再$scope自己直接分配變量,因此不需要$scope注入。而且,由于現在它只是一個普通的JavaScript函數,因此可以更容易地對控制器進行隔離測試。

從前瞻性的角度來看,現在眾所周知Angular 2.0尚不具備$scope,但將使用ECMAScript 6的功能。在Angular團隊發布的任何顯示遷移的預覽中,它們首先都是通過重構控制器來消除的$scope。如果您的代碼是在不使用$scope基礎控制器的情況下設計的,那么遷移的第一步已經完成。

從設計者的角度來看,ControllerAs語法使在對象的操作位置更加清晰。擁有customerCtrl.AddressstoreCtrl.Address使您更容易識別出您有一個由多個不同的控制器為不同目的分配的地址,這要比兩者都使用的容易$scope.Address。在頁面上具有兩個不同的HTML元素,這兩個HTML元素都已綁定{{Address}}并且僅通過控制器知道該元素包含在哪個元素中,這是解決問題的主要麻煩。

最終,除非您嘗試啟動一個10分鐘的演示,否則您真的應該使用ControllerA進行任何嚴肅的Angular工作。


查看完整回答
反對 回復 2019-12-04
?
POPMUISE

TA貢獻1765條經驗 獲得超5個贊

我肯定會推薦Controller As語法。

它更干凈,更高效,您可以組織更多代碼,這是AngularJS的新方法。

除非您與習慣于$ scope語法的團隊合作,否則請絕對使用Controller As。


查看完整回答
反對 回復 2019-12-04
  • 2 回答
  • 0 關注
  • 718 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號