在Angular.js中,作用域(scope)是连接控制器(controller)和视图(view)的关键机制。在作用域中,控制器可以将数据绑定到视图,同时还可以监听视图中的事件。Angular.js提供了三种不同类型的作用域:@、=和&,每种类型都有其独特的用途和行为。
作用域的基本概念
作用域是一个对象,它充当了控制器和视图之间的媒介。在作用域中,控制器可以设置变量和函数,然后将这些变量和函数绑定到视图中以实现数据的双向绑定。作用域还可以监听来自视图的事件,并根据这些事件更新数据。
作用域的作用是让控制器和视图之间达成一致,保证数据的一致性,同时也使得各个模块之间的通信更加方便。
@作用域
@作用域是一种单向绑定方式,表示从父作用域传递字符串给子作用域。
例如,我们有如下代码:
<my-directive my-attribute="hello"></my-directive>
其中my-directive
是一个自定义指令,它有一个属性my-attribute
,它的值为hello
。我们在指令中定义一个作用域,如下所示:
.directive('myDirective', function() { return { scope: { myAttribute: '@' }, template: '<div>{{myAttribute}}</div>' }; });
在这个例子中,控制器使用@
符号来告诉Angular.js,my-attribute
是从父作用域中传递过来的字符串,它绑定到了作用域的myAttribute
属性上。我们在模板中使用myAttribute
变量来显示这个字符串。
=作用域
=作用域是一种双向绑定方式,表示父作用域和子作用域之间共享同一对象的引用。
例如,我们有如下代码:
<my-directive my-model="myObject"></my-directive>
其中my-directive
是一个自定义指令,它有一个属性my-model
,它的值为myObject
。我们在指令中定义一个作用域,如下所示:
-- -------------------- ---- ------- ------------------------- ---------- - ------ - ------ - -------- --- -- --------- ------- ----------- ------------------------- - ------------------------------- -- ---
在这个例子中,控制器使用=
符号来告诉Angular.js,my-model
是从父作用域中传递过来的对象的引用,它绑定到了作用域的myModel
属性上。我们在模板中使用ng-model
来实现输入框和myModel.name
属性之间的双向绑定,同时也在页面上显示出myModel.name
属性的值。
&作用域
&作用域是一种将父作用域中的函数传递给子作用域的方式。
例如,我们有如下代码:
<my-directive my-function="doSomething()"></my-directive>
其中my-directive
是一个自定义指令,它有一个属性my-function
,它的值为doSomething()
。我们在指令中定义一个作用域,如下所示:
.directive('myDirective', function() { return { scope: { myFunction: '&' }, template: '<button ng-click="myFunction()">Click me</button>' }; });
在这个例子中,控制器
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/1671