javaee论坛

普通会员

225648

帖子

335

回复

349

积分

楼主
发表于 2019-11-03 06:36:23 | 查看: 100 | 回复: 0

在Angular中,如果在DOM中使用ng-controller指令添加了控制器,ng会调用该控制器构造函数生成一个控制器对象,创建了一个作用域($scope)

控制器有两个作用:

初始化$scope对象为$scope对象添加行为/方法、初始化$scope对象varmyApp=angular.module('myApp',[]);myApp.controller('GreetingCtrl',['$scope',function($scope){$scope.greeting='Hello!';}]);

我们推荐先声明模块,在模块下定义controller,用内联注入的方式注入scope依赖。

ng-controller指令会创建一个新的$scope作用域,所以我们在显示弹窗的情景下,若有多个父页面使用同一个弹窗页面代码,需要考虑controller,作用域的问题,作用域不同,即使是同名变量,在某一作用域所做的修改不会影响它在其他地方的值。

$Scope作用域

在AngularJS中,子作用域通常在原型上从其父作用域继承而来。而在定义可重用组件时,我们会声明scope为{…},这样我们会创建一个典型的非继承作用域。

这和java的继承很相似,如果set该作用域的属性,就会重写,否则就会直接继承父作用域的属性,当然我们也可以使用$parent来获取父作用域的属性。

值得注意的一点,我们应该习惯使用对象。比如我们想使用一个属性,我们先声明一个对象,将该属性声明为该对象的属性。我们在子作用域修改父作用域的变量时,会自动生成一个作用范围,而在修改对象的属性时,ng-model在寻找对象时,原型继承就会起作用了,会找到父作用域中的对象以及属性

总的来说,绑定对象中的属性,就会避免子作用域覆盖父作用域的问题了。

这篇写的超好,大家看一下@@@@@作用域详解@@@


您需要登录后才可以回帖 登录 | 立即注册

触屏版| 电脑版

技术支持 历史网 V2.0 © 2016-2017