Angular Services详解

Services

Angular的services是一种通过依赖注入绑定在一起的可替换的对象,你可以使用services在你的app中共享你的代码!

Angular的services有下面的特性

  • 懒汉模式 - 只有当某一个application模块用到services时,才会初始化
  • 单例模式 - 每个依赖services的模块都会得到一个来自services工厂产生的单一实例的引用

一般系统自带的services前面都会带有$美元符号.

要使用augular的service,你只需要把service的依赖注入到模块中(比如controller,service,filter或者directive),Angular的依赖注入子系统会自动完成剩下的所有工作。

<!DOCTYPE html>
<html ng-app="myServiceModule">
<head>
    <meta charset="utf-8">
    <script src="https://wx.gtimg.com/bower_components/angular/angular.js"></script>
</head>
<body ng-controller="MyController">
<div>
    <p>Let's try this simple notify service, injected into the controller...</p>
    <p> {{ name }} (you have to click 3 times to see an alert)</p>
</div>
<script>
var app = angular.module('myServiceModule',[]);
app.controller('MyController', ['$scope', function ($scope) {
        $scope.name="hello world";
}]);
</script>

</body>
</html>

再来给factory增加点功能

<!DOCTYPE html>
<html ng-app="myServiceModule">
<head>
    <meta charset="utf-8">
    <script src="https://wx.gtimg.com/bower_components/angular/angular.js"></script>
</head>
<body >
<div ng-controller="MyController">
    <p>Let's try this simple notify service, injected into the controller...</p>
    <input ng-init="message='test'" ng-model="message">
    <button  ng-click="callNotify(message);">notify </button>
    <p> {{ name }} (you have to click 3 times to see an alert)</p>
</div>

<div ng-controller="MyController2">
    <input ng-model="message1">
    <button ng-click="callNotify(message1);">notify </button>
</div>

<script>
var app = angular.module('myServiceModule',[]);
app.factory('notify',function(){
var msgs = [];
return function(msg){
msgs.push(msg);
console.log(msg + " "+ msgs.length);
if(msgs.length == 3){
alert("hello world");
msgs=[];
}
        }
    });
app.controller('MyController', ['$scope','notify', function ($scope,notify) {
        $scope.callNotify = function (msg){
            notify(msg);
}
    }]);

app.controller('MyController2', ['$scope','notify', function ($scope,notify) {
        $scope.callNotify = function (msg){
            notify(msg);
}
    }]);
</script>

</body>
</html>

factory解析,每个factory都是一个实例对象,所以你可以看到里面的msgs变量是会随着点击不停的增加。

再增加一个控制器

<!DOCTYPE html>
<html ng-app="myServiceModule">
<head>
    <meta charset="utf-8">
    <script src="https://wx.gtimg.com/bower_components/angular/angular.js"></script>
</head>
<body >
<div ng-controller="MyController">
    <p>Let's try this simple notify service, injected into the controller...</p>
    <input ng-init="message='test'" ng-model="message">
    <button  ng-click="callNotify(message);">notify </button>
    <p> {{ name }} (you have to click 3 times to see an alert)</p>
</div>

<div ng-controller="MyController2">
    <input ng-model="message1">
    <button ng-click="callNotify(message1);">notify </button>
</div>

<script>
var app = angular.module('myServiceModule',[]);
app.factory('notify',function(){
var msgs = [];
return function(msg){
msgs.push(msg);
console.log(msg + " "+ msgs.length);
if(msgs.length == 3){
alert("hello world");
msgs=[];
}
        }
    });
app.controller('MyController', ['$scope','notify', function ($scope,notify) {
        $scope.callNotify = function (msg){
            notify(msg);
}
    }]);

app.controller('MyController2', ['$scope','notify', function ($scope,notify) {
        $scope.callNotify = function (msg){
            notify(msg);
}
    }]);
</script>

</body>
</html>

另外,不同的控制器也可以只操作一个factory,由于factory只有一个实例,所以你能看到下面的效果

在Angular里面,services作为单例对象在需要到的时候被创建,只有在应用生命周期结束的时候(关闭浏览器)才会被清除。而controllers在不需要的时候就会被销毁了。这就是为什么使用controllers在应用里面传递数据不可靠的原因

factory和services的区别

Factory和Services是最常用的两种方法,Service针对于对象会工作的更好一些,Factory可以编写JavaScript原语和函数

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-12 15:20:46

Angular Services详解的相关文章

angular模块详解

原文: https://www.jianshu.com/p/819421ff955a 大纲 1.angular应用是模块化的 2.对模块(Module)的认识 3.模块的分类:根模块和特性模块 4.NgModel参数详解 5.imports数组与文件头部的import的对比 angular应用是模块化的 1.Angular 应用是模块化的,并且Angular有自己的模块系统,它被称为Angular模块或NgModules. 2.每个Angular应用至少有一个模块(根模块),习惯上命名为AppM

angular路由详解:

1.$routeProvider ngRoute模块中的服务 2.otherwise:设置用于路由改变时,与任何其他定义的路由无法匹配的时候执行的代码 3.when:为$route服务定义新的路由 例 var app=angular.module('myApp',['ngRoute']); //配置angular路由//$routeProvider是ngRoute模块中的服务 app.config(function($routeProvider){ //when:第一个值是配置路由的名称,第二个

简话Angular 04 Angular过滤器详解

一句话: filter是万能的数据处理器,可以过滤数据,排序数据,删除数据,扩展数据 1. 内置filter大全 url: https://docs.angularjs.org/api/ng/filter uppercase lowercase 转换为大小写 date 转换为各种日期格式 number 将数字格式化成文本. 它的第二个参数是可选的, 用来控制小数点后截取的位数 currency 转换为货币形式 json 转换json或javascript对象成字符串 filter 过滤数据,可以

angular指令详解--自定义指令

自定义指令 directive()这个方法是用来定义指令的: angular.module('myApp', []) .directive('myDirective', function ($timeout, UserDefinedService) { // 指令定义放在这里 }); directive() 方法可以接受两个参数:1. name(字符串)指令的名字,用来在视图中引用特定的指令.2. factory_function (函数)这个函数返回一个对象,其中定义了指令的全部行为.$com

Angular.js中处理页面闪烁的方法详解

Angular.js中处理页面闪烁的方法详解 前言 大家在使用{{}}绑定数据的时候,页面加载会出现满屏尽是{{xxx}}的情况.数据还没响应,但页面已经渲染了.这是因为浏览器和angularjs渲染页面都需要消耗一定的时间,这个间隔可能很小,甚至让人感觉不到,这种情况一切正常,但这个时间也可能很长,这时候用户可能会看到满屏尽是{{xxxx}}.这种情况被叫做"Flash Of Unrendered Content (FOUC)(K)?and is always unwanted.".

angular.fullpage.js指令的使用方法(详解)

接之前,jquery.fullpage在angular单页应用中存在重复初始化,分页器加倍问题,索性直接找到了angular.fullpage.js全屏滚动指令应用 angular-fullpage文档这里(将的不仔细自己做有点麻烦,不过有个demo) demo的却也不好看,直接上代码详解 1.首先得引用文件(当然angular.js必须的,省略) 2.导入angular.module内(fullPage.js放入,其他可以忽略自己用到的) 3. angular单页路由配置 state中加入(c

angular 自定义指令详解 Directive

在angular中,Directive,自定义指令的学习,可以更好的理解angular指令的原理,当angular的指令不能满足你的需求的时候,嘿嘿,你就可以来看看这篇文章,自定义自己的指令,可以满足你的各种需求的指令. 本篇文章的参考来自  AngularJS权威指南 , 文章中主要介绍指令定义的选项配置 废话不多说,下面就直接上代码 //angular指令的定义,myDirective ,使用驼峰命名法 angular.module('myApp', []) .directive('myDi

CentOS7中firewall防火墙详解和配置

官方文档地址: https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Security_Guide/sec-Using_Firewalls.html#sec-Introduction_to_firewalld1 cd /usr/lib/firewalld/services 目录中存放定义好的网络服务和端口参数,系统参数,不能修改. cd /etc/firewalld/services/ syst

CentOS7安装nagios并配置出图详解

目录 开始之前 系统环境 监控内容 所需软件包 Centos7重要变化 配置开发环境 同步时间 关闭Selinux 使用CRT上传软件包 安装邮件服务 监控主机安装 常用到的命令 安装nagios所需要的运行环境 增加用户 安装nagios 配置权限 安装插件 安装nrpe 远程主机安装 常用到的命令 配置运行环境 安装nagios-plugin 安装nrpe 启动nrpe. 监控主机安装PNP 配置开发环境 安装php4nagios (版本号为0.6) 配置pnp4nagios 图表展示 问题