AngularJS 的自定义服务 (五)

AngularJS 允许我们自定服务,它类似于跨控制器的“全局变量”,为控制器之间的数据传递提供了可能。
1.使用 value 可以自定义服务,代码如下



    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title></title>


    <div ng-controller="inputController">
        <input type="text" value="" ng-model="inputText">
        <button ng-click="save(inputText)">保存</button>
    </div>

    <div ng-controller="showController">
        <p>{{ showMsg }}</p>
        <button ng-click="show()">显示</button>
    </div>

    <script src="js/libs/angular.js"></script>

    <script>
        var app = angular.module("app", []);

        app.value("myService", {});

        app.controller("inputController", ["$scope", "myService", function ($scope, myService) {
            $scope.save = function (inputText) {
                myService.msg = inputText;
            }
        }]);

        app.controller("showController", ["$scope", "myService", function ($scope, myService) {
            $scope.show = function () {
                $scope.showMsg = myService.msg;
            }
        }]);
    </script>


使用 app.value("myService", {}); 自定义名为 “myService” 的服务
效果图如图,在input中输入内容后 点击保存,然后点击显示,就可以看到数据同步到了另一个控制器


2.使用 app.constant("myService", {}); 定义了一个 ‘constant’ ,特点与 “value”区别。只是定义的时候只生效第一次定义的数据,重复定义无效。但是在注入后,是可以修改内容的。



    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title></title>


    <div ng-controller="inputController">
        <input type="text" value="" ng-model="inputText">
        <button ng-click="save(inputText)">保存</button>
    </div>


    <script src="js/libs/angular.js"></script>

    <script>
        var app = angular.module("app", []);

        app.constant("myService",
            {
                msg : "123"
            });

        app.constant("myService",
            {
                msg: "333"
            });
        app.controller("inputController", ["$scope", "myService", function ($scope, myService) {
            $scope.save = function (inputText) {
                console.log(inputText);
            }
        }]);


    </script>



在上述中重复定义了两次 “myService”,但是只有首次定义的才会生效
app.constant("myService",
            {
                msg : "123"
            });

app.constant("myService",
            {
                msg: "333"
            });

3.使用 app.factory("myService", function () {}); 定义了一个 ‘factory’ 工厂,在方法中是可以执行初始化代码的,灵活性更高
 app.factory("myService", function () {
            var obj = {};
            obj.msg = "123";

            return obj;
        });

4.使用 service服务相当于本身已经构建了一个空白对象,在服务内部所有内容的操作均通过this.来完成
var app = angular.module('app', []);
	app.service('FrankService', function (){

		this.pname = 'frank';
		var secret = '这是一个小秘密';
		//特权函数
		this.setSecret = function (tempSecret){
			secret = tempSecret;
		}
		this.getSecret = function (){
			return secret;
		};
	});

	//controller1
	app.controller('controller1', ['$scope', function ($scope){
		$scope.msg = '';
		$scope.submit = function (tempMsg){
			console.log('controller1中的内容被保存到了全局变量中');
		};
	}]);

5.provider服务 ,描述:provider服务通过.provider()方法添加,并在第二个参数的函数内,通过this.$get = function (){...}的固定结构对服务内容进行扩充,特殊:provider服务只要被创建,就会直接添加到app当中,无论是否对controller进行注入,provider服务都会一直存在。其余四种自定义服务都不能做到这点。
app.provider('FrankService', function (){
		console.log('provider initialized');
		this.$get = function (){
			var obj = {};
			obj.pname = 'franky';
			return obj;
		}
	});

总结
1."value"可以创建跨控制器的访问对象,"constant"可以创建的时候,不背其他人所覆盖和篡改, "factory"可以在初始化的时候执行特殊代码 。
2."service" 和 "provider" 区别:provider需要通过"this.$get" 来设置。service需要在使用的时候才初始化,提高性功能。但是provider无论页面中是否有使用,都会被初始化。

最后 , 晚安!

转载于:https://my.oschina.net/u/4198293/blog/3100088

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值