Latest web development tutorials

AngularJS Scope(作用域)

Scope(作用域) 是應用在HTML (視圖) 和JavaScript (控制器)之間的紐帶。

Scope 是一個對象,有可用的方法和屬性。

Scope 可應用在視圖和控制器上。


如何使用Scope

當你在AngularJS創建控制器時,你可以將$scope對象當作一個參數傳遞:

AngularJS 實例

控制器中的屬性對應了視圖上的屬性:

< div ng-app= "myApp" ng-controller= "myCtrl" >

< h1 > {{carname}} < /h1 >

< /div >

< script >
var app = angular.module( 'myApp' , []);

app.controller( 'myCtrl' , function ($scope) {
$scope.carname = "Volvo" ;
});
< /script >

嘗試一下»

當在控制器中添加$scope對象時,視圖(HTML)可以獲取了這些屬性。

視圖中,你不需要添加$scope前綴,只需要添加屬性名即可,如:{{carname}}


Scope 概述

AngularJS 應用組成如下:

  • View(視圖), 即HTML。
  • Model(模型), 當前視圖中可用的數據。
  • Controller(控制器), 即JavaScript 函數,可以添加或修改屬性。

scope 是模型。

scope 是一個JavaScript 對象,帶有屬性和方法,這些屬性和方法可以在視圖和控制器中使用。

AngularJS 實例

如果你修改了視圖,模型和控制器也會相應更新:

< div ng-app= "myApp" ng-controller= "myCtrl" >

< input ng-model= "name" >

< h1 >我的名字是{{name}} < /h1 >

< /div >

< script >
var app = angular.module( 'myApp' , []);

app.controller( 'myCtrl' , function ($scope) {
$scope.name = "John Dow" ;
});
< /script >

嘗試一下»

Scope 作用範圍

了解你當前使用的scope 是非常重要的。

在以上兩個實例中,只有一個作用域scope,所以處理起來比較簡單,但在大型項目中, HTML DOM 中有多個作用域,這時你就需要知道你使用的scope 對應的作用域是哪一個。

AngularJS 實例

當我們使用ng-repeat指令時,每個重複項都訪問了當前的重複對象:

< div ng-app= "myApp" ng-controller= "myCtrl" >

< ul >
< li ng-repeat= "x in names" > {{x}} < /li >
< /ul >

< /div >

< script >
var app = angular.module( 'myApp' , []);

app.controller( 'myCtrl' , function ($scope) {
$scope.names = [ "Emil" , "Tobias" , "Linus" ];
});
< /script >

嘗試一下»

每個<li>元素可以訪問當前的重複對象,這裡對應的是一個字符串,並使用變量x表示。


根作用域

所有的應用都有一個$rootScope ,它可以作用在ng-app指令包含的所有HTML元素中。

$rootScope可作用於整個應用中。是各個controller 中scope 的橋樑。 用rootscope 定義的值,可以在各個controller 中使用。

AngularJS 實例

創建控制器時,將$rootScope 作為參數傳遞,可在應用中使用:

< div ng-app= "myApp" ng-controller= "myCtrl" >

< h1 > {{lastname}}家族成員: < /h1 >

< ul >
< li ng-repeat= "x in names" > {{x}} {{lastname}} < /li >
< /ul >

< /div >

< script >
var app = angular.module( 'myApp' , []);

app.controller( 'myCtrl' , function ($scope, $rootScope) {
$scope.names = [ "Emil" , "Tobias" , "Linus" ];
$rootScope.lastname = "Refsnes" ;
});
< /script >

嘗試一下»