实战之AngularJS 的Scope和Service的深入应用心得

简介: 实战之AngularJS 的Scope和Service的深入应用心得

AngularJS 的Scope

在这里插入图片描述

作用域是HTML(视图)和JavaScript(控制器)之间的链接。
作用域是一个具有可用方法和属性的对象。
作用域可应用于视图和控制器。
如何使用范围,在angularjs中创建控制器时,可以将$scope对象作为参数传递:

<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}。
angularjs的应用程序组成如下:
视图,即HTML。
模型,当前视图中可用的数据。
控制器,即JavaScript函数,可以添加或修改属性。
范围是一个模型。
Scope是一个JavaScript对象,具有可在视图和控制器中使用的属性和方法。

<div ng-app="myApp" ng-controller="myCtrl">
    <input ng-model="name">
    <h1>{{greeting}}</h1>
    <button ng-click='sayHello()'>点我</button>    
</div>
 
<script>
var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope) {
    $scope.name = "Runoob";
    $scope.sayHello = function() {
        $scope.greeting = 'Hello ' + $scope.name + '!';
    };
});
</script>

在这里插入图片描述

Scope 作用范围

了解当前使用的范围非常重要。
在上述两个示例中,只有一个作用域,因此处理起来相对简单。然而,在大型项目中,HTML DOM中有多个作用域。此时,需要知道哪个范围对应于使用的范围。

<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>

在这里插入图片描述

根范围

所有应用程序都有一个$rootscope,它可以作用于ng应用程序指令中包含的所有HTML元素。
$rootscope可以在整个应用程序中使用。它是每个控制器中作用域的桥梁。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>

在这里插入图片描述

AngularJS 服务(Service)

什么是服务?
在angularjs中,服务是可以在angularjs应用程序中使用的函数或对象。
Angularjs拥有30多个内置服务。
有一个$location服务可以返回当前页面的URL地址。

var app = angular.module('myApp', []);
app.controller('customersCtrl', function($scope, $location) {
    $scope.myUrl = $location.absUrl();
});

为什么要使用服务?
在许多服务中,例如$location服务,它可以使用DOM中存在的对象,例如窗口位置对象,但是窗口位置对象在angularjs应用程序中有一定的限制。
Angularjs将始终监视应用程序并处理事件更改。Angularjs使用$location服务而不是窗口。location对象更好。
在这里插入图片描述

var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope, $http) {
    $http.get("welcome.htm").then(function (response) {
        $scope.myWelcome = response.data;
    });
});
var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope, $timeout) {
    $scope.myHeader = "Hello World!";
    $timeout(function () {
        $scope.myHeader = "How are you today?";
    }, 2000);
});

Angularjs$interval服务对应于JS窗口Setinterval函数。

var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope, $interval) {
    $scope.theTime = new Date().toLocaleTimeString();
    $interval(function () {
        $scope.theTime = new Date().toLocaleTimeString();
    }, 1000);
});

要使用自定义服务,需要在定义控制器和设置依赖项时独立添加它:

app.service('hexafy', function() {
    this.myFunc = function (x) {
        return x.toString(16);
    }
});
app.controller('myCtrl', function($scope, hexafy) {
    $scope.hex = hexafy.myFunc(255);
});

从对象数组获取值时,可以使用过滤器:

<ul>
<li ng-repeat="x in counts">{{x | myFormat}}</li>
</ul>
相关文章
|
C# 图形学 Windows
Winform控件优化之背景透明那些事2:窗体背景透明、镂空穿透、SetStyle、GDI透明效果等
两行代码就能实现Form窗体的(背景)透明效果,它不是Opacity属性的整个窗体透明,`TransparencyKey`实现窗体的透明、窗体中间部分镂空效果...
4785 0
Winform控件优化之背景透明那些事2:窗体背景透明、镂空穿透、SetStyle、GDI透明效果等
|
4月前
|
JavaScript 前端开发 测试技术
Angular框架
本文深入解析Angular核心概念,涵盖ng-show与ng-if的性能差异、$rootScope与$scope的关系、表达式机制、Digest周期、定时器与监听器的取消方法。同时探讨Directive的restrict属性、作用域绑定方式及模块间通信策略。此外,介绍性能优化技巧、单元测试实践、Angular 2生命周期钩子、路由机制、事件发射器、AOT编译、安全防护与Shadow DOM等高级主题,全面提升开发技能。
|
9月前
|
运维 安全 BI
ERPNext 介绍、安装和维护建议
ERPNext 是一款开源企业资源计划系统,功能涵盖财务、销售、采购、库存等多个模块,支持多组织架构与高度自定义。本文介绍其核心特性,并结合实战经验,提供基于 Websoft9 的简便部署方案及后期维护建议,助力中小企业快速搭建稳定高效的管理系统。
3170 0
|
9月前
|
开发框架 供应链 Linux
Odoo VS ERPNext 如何选择?
ERPNext与Odoo均为开源ERP系统,适用于多种企业管理场景。ERPNext功能全面,支持中文及中国会计本地化,适合对功能和合规性要求较高的企业;Odoo模块丰富、界面友好,社区版适合小型企业或开发者二次开发,企业版则具备更强的定制与本地化能力,适合复杂业务需求。两者各有优势,适用不同企业类型与业务场景。
Odoo VS ERPNext 如何选择?
|
存储 NoSQL Java
工作 6 年,@Transactional 注解用的一塌糊涂
工作 6 年,@Transactional 注解用的一塌糊涂
472 122
|
人工智能 算法 API
重磅:谷歌AI Gemini 2.0 Pro/Flash已来,国内用户怎么使用?
当人工智能的浪潮席卷全球,谷歌再次站在了时代的潮头。Gemini 2.0,这个名字如今已成为 AI 领域最耀眼的明星。它不仅仅是一个模型的升级,更代表着一场技术革命的开端。2024 年末,Gemini 2.0 Flash 以其疾风骤雨般的速度震撼登场,紧接着,2025 年初,Gemini 2.0 Pro 系列的发布,则将这场革命推向了高潮。谷歌正式宣告,我们已步入 Gemini 2.0 时代!
1379 15
|
监控 Java 运维
开发与运维收集问题之jstat命令查看JVM垃圾回收情况如何解决
开发与运维收集问题之jstat命令查看JVM垃圾回收情况如何解决
300 1
|
前端开发 JavaScript
前端:实现一个 sleep 函数
在前端开发中,实现一个 `sleep` 函数可以用来暂停代码执行,模拟延迟效果,常用于测试或控制异步操作的节奏。该函数通常基于 `Promise` 和 `setTimeout` 实现,简单易用。
|
安全 应用服务中间件 网络安全
简单比较 http https http2,我们要如何把http升级为https
【9月更文挑战第13天】本文对比了HTTP、HTTPS和HTTP/2的特点与适用场景。HTTP以明文传输,适合低安全要求的环境;HTTPS通过SSL/TLS加密,适用于电子商务等安全要求高的场景;HTTP/2采用二进制格式和多路复用,适合高性能Web应用。文章还详细介绍了将HTTP升级为HTTPS的步骤,包括申请和安装SSL证书、配置Web服务器、重定向HTTP流量到HTTPS以及测试HTTPS功能。升级到HTTPS可提高数据安全性和用户信任度。
1615 13
|
JavaScript 前端开发 容器
Vue好看的组件库:Element
Element UI 提供了一套丰富的可复用组件,可以快速构建漂亮的网页界面和 Web 应用程序。它包含了常见的表单、表格、对话框、导航、菜单等组件,同时也提供了一些常用的工具函数和样式。Element UI 的设计风格简洁、美观,易于使用和定制,因此在 Vue.js 开发的项目中被广泛应用。
1931 2
Vue好看的组件库:Element
下一篇
开通oss服务