14-Angular供应商和自定义服务

在Angular有供应商的概念,可配置Angular的一些服务。

<div ng-controller="Aaa">
    <!-- {{name}} -->
    @@[email protected]@
</div>

<script type="text/javascript">

var m1 = angular.module(‘myApp‘,[]);

m1.config([‘$interpolateProvider‘,function($interpolateProvider){

    //配置表达式 {{}}
    $interpolateProvider.startSymbol(‘@@‘);
    $interpolateProvider.endSymbol(‘@@‘);

}]);

m1.controller(‘Aaa‘,[‘$scope‘,‘$log‘,function($scope,$log){
    $scope.name = ‘xiecg‘;
    $log.debug(‘hello‘);
}]);

</script>

我们以前面提到的$interpolate为例子,配置angular渲染页面的数据的表达式,不在通过{{}}渲染而是@@符号。

<script type="text/javascript">

    var m1 = angular.module(‘myApp‘,[]);
    m1.config([‘$logProvider‘,function($logProvider){
        $logProvider.debugEnabled(false);    //为false禁用debug功能
    }]);
    m1.controller(‘Aaa‘,[‘$scope‘,‘$log‘,function($scope,$log){
        $log.debug(‘hello‘);
    }]);

</script>

这样debug的功能就完全禁用掉。

下面看看angular的自定义服务。

使用 factory 自定义服务,无法使用 config 配置。

<script type="text/javascript">

var m1 = angular.module(‘myApp‘,[]);
m1.factory(‘myService‘,function(){
    return {
        name : ‘xiecg‘,
        getName : function(){
            return this.name;
        }
    };
});

m1.controller(‘Aaa‘,[‘$scope‘,‘myService‘,function($scope,myService){
    console.log(myService.getName());
}]);
</script>

注意我们在controller中引入自定义服务是不带$的,主要是区分内置&自定义。

使用 provider 自定义服务,可以配置 config。

<script type="text/javascript">

var m1 = angular.module(‘myApp‘,[]);

m1.config([‘myServiceProvider‘,function(myServiceProvider){
    console.log(myServiceProvider);
    myServiceProvider.name = ‘XCG‘;
}]);
m1.provider(‘myService‘,function(){
    return {
        name : ‘xiecg‘,
        $get : function(){
            return {
                name : this.name,
                getName : function(){
                    return this.name;
                }
            };
        }
    };
});

m1.controller(‘Aaa‘,[‘$scope‘,‘myService‘,function($scope,myService){
    console.log(myService.getName());
}]);
</script>

依然能获取name值,也可以像前面的章节那样使用 config 配置。

再看一个例子。

<script type="text/javascript">

var m1 = angular.module(‘myApp‘,[]);

m1.config([‘myRandomNumProvider‘,function(myRandomNumProvider){
    myRandomNumProvider.int(true);
}]);
m1.provider(‘myRandomNum‘,function(){
    return {
        bolInt : false,
        int : function(argBol){
            this.bolInt = argBol ? true : false;
        },
        $get : function(){
            var _this = this;
            return function(num1,num2){
                return _this.bolInt ? Math.round(Math.random() * (num2 - num1) + num1) : Math.random() * (num2 - num1) + num1;
            };
        }
    };
});

m1.controller(‘Aaa‘,[‘$scope‘,‘myRandomNum‘,function($scope,myRandomNum){
    console.log(myRandomNum(1,10));
}]);
</script>

获取随机数,注意myService的config,将int设置为true表示整数,false表示有小数。

补充:多个服务间的通信问题。

<script type="text/javascript">

var m1 = angular.module(‘module‘,[]);
m1.factory(‘myService‘,function(){
    return {
        name : ‘xiecg‘,
        getName : function(){
            return this.name;
        }
    };
});

var m2 = angular.module(‘myApp‘,[‘module‘]);    //m2模块需要m1模块的服务,引入m1模块的名字即可
m2.controller(‘Aaa‘,[‘$scope‘,‘myService‘,function($scope,myService){
    console.log(myService);
}]);

</script>

学习笔记,如有不足,请指正!转载请保留原文链接,谢谢。

最後,微博求粉,谢谢。

时间: 2024-10-27 13:42:38

14-Angular供应商和自定义服务的相关文章

angularJs 自定义服务 provide 与 factory 的区别

<!DOCTYPE html> <html lang="en" ng-app="myApp"> <head> <meta charset="UTF-8" /> <title>Document</title> <script src="angular.min.js" ></script> <script type="t

angularjs 自定义服务

<!DOCTYPE HTML> <html ng-app="myApp"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>无标题文档</title> <script src="angular.min.js"></scrip

angular(3)服务 --注入---自定义模块--单页面应用

ng内部,一旦发生值改变操作,如$scope.m=x,就会自动轮询$digest队列,触发指定的$watch,调用其回调函数,然后修改dom树. 干货:https://github.com/xufei/blog/issues/10 1.ng提供了许多内置的服务,例如常用的$scope\$http\$window\$location等. http:POST请求: var app = angular.module('myApp', ['ng']); app.run(function($http){

AngularJs练习Demo15自定义服务

1 @{ 2 Layout = null; 3 } 4 5 <!DOCTYPE html> 6 7 <html> 8 <head> 9 <meta name="viewport" content="width=device-width" /> 10 <title>Provider</title> 11 <script type="text/javascript" src

angularJs自定义服务(实现签名和加密)

写在前面: angularJS是google公司主推的js开发优秀框架... 页面展示: 在应用中进行加密是普遍存在的,个人建议在前端实现加密签名(前端加密是否必要来自知乎:http://www.zhihu.com/question/25539382) 对base64.md5.sha1加密算法简单解释: 1.base64是可逆的.对称的加密算法:base64具有64个基本字符组成的基本字符集 base64加密原理: a.base64以3个字节为一组,而一个字节占8个位(bit) b.再把24bi

angularjs factory,service,provider 自定义服务的不同

angularjs框架学了有一段时间了,感觉很好用.可以把angularjs的app理解成php的class,controller是控制器,而内置服务和自定义服务就可以理解成models了.angularjs的内置服务多,例如:$scope,$rootScope,$http,$q,$resource,$routeProvider等等,下面来说一下怎么自定义服务 一,factory,service,provider自定义服务,services.js 'use strict'; /* Service

AngularJs学习笔记5——自定义服务

前面整理了AngularJs双向数据绑定和自定义指令的相关内容,从手册上看也知道,ng部分还包括过滤器和函数,以及服务等. 过滤器:filter,就是对数据进行格式化,注意管道格式,例如: {{表达式 | number/currency/data/orderBy : " 相应的格式或表达式 "}} 函数:function,应该不用介绍了.这里需要注意的是forEach函数的形参顺序,基本格式如下: 1 var obj={name:"fanfan",age:"

自定义服务 factory 和 service

1.使用factory 方法 必须有返回值 即return ,factory只是调用普通的function,可以返回任何东西. HTML 代码 <body ng-app="myApp"> <div ng-controller="myCtrl"> <ul> <li>{{data.name}}</li> <li>{{data.age}}</li> <li>{{data.pho

Angular JS 学习之服务(Service)

1.AngularJS中,可以创建自己的服务,或使用内建服务: 2.在AngularJS中,服务是一个函数或对象,可在你的AngularJS应用中使用: AngularJS内建了30多个服务:有个$location服务,它可以返回当前页面的URL: var app=angular.module('myApp',[]); app.controller('customersCtrl',function($scope,$location){ $scope.myUrl=$location.absUrl(