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无论页面中是否有使用,都会被初始化。
最后 , 晚安!