发表于: 2017-07-09 23:24:57
1 909
1.服务的三种类型,Factory、Service、Provider。
2、factory方式创建的服务,作用就是返回一个有属性有方法的对象。相当于:var f = myFactory();
//通过工厂模式创建自定义服务
app.factory('myFactory', function() {。。。}
//创建控制器并调用
app.controller('myCtrl', function($scope, myFactory) {
myFactory.setAge(20);。。})
注意在自定义服务里注入服务示例,但不能注入$scope作用域对象。
3、通过service方式创建自定义服务,相当于new的一个对象:var s = new myService();,只要把属性和方法添加到this上才可以在controller里调用。
app.service('myService', function($http,$q) {…}
app.controller('myCtrl', function($scope, myService) {..}
4、只有provder是能传 .config() 函数的 service。如果想在 service 对象启用之前,先进行模块范围的配置,那就应该选择 provider。需要注意的是:在config函数里注入provider时,名字应该是:providerName+Provider.
使用Provider的优点就是,你可以在Provider对象传递到应用程序的其他部分之前在app.config函数中对其进行修改。
当你使用Provider创建一个service时,唯一的可以在你的控制器中访问的属性和方法是通过$get()函数返回内容。
1、任务重构开始写服务,将各种http请求接口纳入
app.factory('httpGet',function ($http) {
return {
article: function (params) {
return $http({
method: "GET",
url: "/carrots-admin-ajax/a/article/search",
params:params
})
},
。。。}})
控制器内注入
app.controller('siteCtrl',['$scope','$state','$http','$stateParams','$filter','httpGet',function($scope,$state,$http,$stateParams,$filter,httpGet){。。。}
控制器内使用
httpGet.article(params)
.success(function (response) {。。。}
刚写也是各种报错,没写逗号,忘记注入,代参值格式不对等等,解决之后发现还是挺简单的,目的就是将一些可以复用的函数进行封装,便于直接引用。就当前任务来说,感觉意义不大,毕竟要么接口不通用,要么复用的都在一个控制器内,直接写成一个函数也是可以复用。主要还是学习这个使用要求吧。
2、
收获:服务初步涉及,由于全是接口请求类的,涉及面还是比较窄,后期还需要更多的实际应用来体现优越性,以及知识点的学习。
困难:跨域,好像传值不太方便,需要用到$q,明天研究下怎么弄。
计划:明天开始写自定义指令,跟几个师兄探讨了一下,任务来说,将上传事情封装比较合适,代码比较长,逻辑事件比较清晰。
评论