AngularJS的ng-repeat指令与scope继承关系实例详解
发布时间 - 2026-01-10 22:42:07 点击率:次本文实例分析了AngularJS的ng-repeat指令与scope继承关系。分享给大家供大家参考,具体如下:

ng-repeat指令的使用方式可以参考如下代码:
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>ng-repeat</title>
<script src="jquery-1.11.1.js"></script>
<script src="angular-1.2.25.js"></script>
<script>
function wholeController($scope,$rootScope,$injector)
{
$scope.buttons = ["button1","button2","button3"];
$scope.btnFunc = function(value){
alert(value);
};
}
</script>
</head>
<body ng-app>
<div id="first" ng-controller="wholeController">
<div id="buttonDiv">
<input type="button" ng-repeat="button in buttons" id="btn{{$index}}" value="{{button}}" ng-click="btnFunc(button);"/>
</div>
<input type="button" value="test" ng-click="testFunc();">
</div>
</body>
</html>
这里需要注意:ng-click中访问button不需要使用{{button}}这种语法;而其他非AngularJS环境下,必须通过{{button}}这种方式取值。ng-repeat指令中$index代表遍历的数组的索引,从0开始。
我们知道ng-controller指令会创建一个新的作用域scope,测试代码如下:
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>ng-repeat</title>
<script src="jquery-1.11.1.js"></script>
<script src="angular-1.2.25.js"></script>
<script>
//$scope是ng-controller指令新建的作用域
function wholeController($scope,$rootScope,$injector)
{
alert($scope.$parent === $rootScope);//输出true
}
</script>
</head>
<body ng-app>
<div id="first" ng-controller="wholeController">
</div>
</body>
</html>
我们可以使用angular.element(domElement).scope()方法来获得某一个DOM元素相关联的作用域。
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>ng-repeat</title>
<script src="jquery-1.11.1.js"></script>
<script src="angular-1.2.25.js"></script>
<script>
function wholeController($scope,$rootScope,$injector)
{
$scope.buttons = ["button1","button2","button3"];
$scope.testFunc = function(){
//拿到dom元素上关联的作用域
var scope0 = angular.element($("#btn0")[0]).scope();
var scope1 = angular.element($("#btn1")[0]).scope();
alert(scope0 == scope1);//输出false
alert(scope0.$parent === $scope);//true
alert(scope1.$parent === $scope);//true
};
}
</script>
</head>
<body ng-app>
<div id="first" ng-controller="wholeController">
<div id="buttonDiv">
<input type="button" ng-repeat="button in buttons" id="btn{{$index}}" value="{{button}}" />
</div>
<input type="button" value="test" ng-click="testFunc();">
</div>
</body>
</html>
可以看到ng-repeat指令会新建作用域,而且是为循环中的每个dom元素新建一个作用域。通过F12调试,可以看到scope0和scope1的内容如下:
可以看到scope0和scope1中都有一个buttons属性,这个属性就是从父作用域下继承得到的,很类似于JavaScript的原型链。
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>ng-repeat</title>
<script src="jquery-1.11.1.js"></script>
<script src="angular-1.2.25.js"></script>
<script>
function wholeController($scope,$rootScope,$injector)
{
$scope.buttons = ["button1","button2","button3"];
$scope.method1 = function(){
var scope0 = angular.element($("#btn0")[0]).scope();
scope0.buttons = ["a1","b1","c1"];
};
$scope.method2 = function(){
var scope0 = angular.element($("#btn0")[0]).scope();
scope0.$parent.buttons = ["a2","b2","c2"];
};
$scope.method3 = function(){
var scope0 = angular.element($("#btn0")[0]).scope();
scope0.buttons[0] = "a3";
scope0.buttons[1] = "b3";
scope0.buttons[2] = "c3";
};
}
</script>
</head>
<body ng-app>
<div id="first" ng-controller="wholeController">
<div id="buttonDiv">
<input type="button" ng-repeat="button in buttons" id="btn{{$index}}" value="{{button}}" />
</div>
<input type="button" value="method1" ng-click="method1();">
<input type="button" value="method2" ng-click="method2();">
<input type="button" value="method3" ng-click="method3();">
</div>
</body>
</html>
当点击method1、method2、method3的时候,我们希望将按钮button1、button2、button3替换掉。运行上面的代码可以发现:method2和method3都能成功达到目的,但是method1不能达到目的。这其实很类似C语言中传值,还是传引用的问题。
var obj = {"name":"aty"};
wrongChangeName(obj);
alert(obj.name);//仍然是aty
rightChangeName(obj);
alert(obj.name);//hehe
function rightChangeName(obj)
{
obj.name="hehe";
}
function wrongChangeName(obj)
{
obj = {"name":"hehe"};
}
wrongChangeName就类似于我们上面的method1,而rightChangeName类似于上面的method3。也就是说如果我们想在childScope中修改parentScope中某个属性的值,那么该属性一定不能是javascript基本数据类型,一定要是对象类型。而且不能直接通过=进行赋值修改,必须是调用对象的方法来修改。
更多关于AngularJS相关内容感兴趣的读者可查看本站专题:《AngularJS入门与进阶教程》及《AngularJS MVC架构总结》
希望本文所述对大家AngularJS程序设计有所帮助。
# AngularJS
# ng-repeat指令
# scope
# 继承
# AngularJS深入探讨scope
# 继承结构
# 事件系统和生命周期
# 深入理解Angular.JS中的Scope继承
# 可以看到
# 类似于
# 方法来
# 进阶
# 相关内容
# 不需要
# 都能
# 遍历
# 是从
# 感兴趣
# 给大家
# 相关联
# 可以使用
# 仍然是
# 更多关于
# 中都
# 所述
# 创建一个
# 需要注意
# 程序设计
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
太平洋网站制作公司,网络用语太平洋是什么意思?
JS经典正则表达式笔试题汇总
Laravel项目如何进行性能优化_Laravel应用性能分析与优化技巧大全
Win11怎么更改系统语言为中文_Windows11安装语言包并设为显示语言
Android利用动画实现背景逐渐变暗
郑州企业网站制作公司,郑州招聘网站有哪些?
Laravel集合Collection怎么用_Laravel集合常用函数详解
历史网站制作软件,华为如何找回被删除的网站?
Laravel Facade的原理是什么_深入理解Laravel门面及其工作机制
如何快速搭建安全的FTP站点?
laravel怎么实现图片的压缩和裁剪_laravel图片压缩与裁剪方法
如何基于云服务器快速搭建网站及云盘系统?
Laravel如何使用Sanctum进行API认证?(SPA实战)
Laravel怎么实现API接口鉴权_Laravel Sanctum令牌生成与请求验证【教程】
Laravel怎么创建控制器Controller_Laravel路由绑定与控制器逻辑编写【指南】
如何在Windows虚拟主机上快速搭建网站?
LinuxShell函数封装方法_脚本复用设计思路【教程】
zabbix利用python脚本发送报警邮件的方法
Laravel怎么生成二维码图片_Laravel集成Simple-QrCode扩展包与参数设置【实战】
Laravel如何使用withoutEvents方法临时禁用模型事件
Laravel表单请求验证类怎么用_Laravel Form Request分离验证逻辑教程
作用域操作符会触发自动加载吗_php类自动加载机制与::调用【教程】
详解jQuery中的事件
教你用AI将一段旋律扩展成一首完整的曲子
iOS验证手机号的正则表达式
Laravel如何优化应用性能?(缓存和优化命令)
香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化
Laravel如何部署到服务器_线上部署Laravel项目的完整流程与步骤
JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)
Android 常见的图片加载框架详细介绍
海南网站制作公司有哪些,海口网是哪家的?
北京的网站制作公司有哪些,哪个视频网站最好?
Laravel如何实现API资源集合?(Resource Collection教程)
Firefox Developer Edition开发者版本入口
Laravel Fortify是什么,和Jetstream有什么关系
网页设计与网站制作内容,怎样注册网站?
想要更高端的建设网站,这些原则一定要坚持!
Python正则表达式进阶教程_复杂匹配与分组替换解析
详解jQuery中基本的动画方法
Laravel API资源类怎么用_Laravel API Resource数据转换
如何用ChatGPT准备面试 模拟面试问答与职场话术练习教程
Python面向对象测试方法_mock解析【教程】
香港服务器选型指南:免备案配置与高效建站方案解析
Laravel怎么自定义错误页面_Laravel修改404和500页面模板
UC浏览器如何设置启动页 UC浏览器启动页设置方法
高端智能建站公司优选:品牌定制与SEO优化一站式服务
Laravel如何优雅地处理服务层_在Laravel中使用Service层和Repository层
Laravel如何处理文件下载请求?(Response示例)
Laravel如何生成API文档?(Swagger/OpenAPI教程)
LinuxCD持续部署教程_自动发布与回滚机制

