Tay*_*suk 8 javascript factory angularjs parse-platform
我正在使用角度工厂在Parse.com上的课程上执行CRUD.我总共有4个类,需要在所有4上执行创建,获取,放置和删除.尽管每个URL的URL不同,但其他所有内容都保持不变.我可以将变量传递给工厂以更改api URL中的类名吗?
这是一个工厂的例子.
.factory('Programme',['$http','PARSE_CREDENTIALS',function($http,PARSE_CREDENTIALS){
return {
getAll:function(){
return $http.get('https://api.parse.com/1/classes/Programme',{
headers:{
'X-Parse-Application-Id': PARSE_CREDENTIALS.APP_ID,
'X-Parse-REST-API-Key':PARSE_CREDENTIALS.REST_API_KEY,
'X-Parse-Session-Token': PARSE_CREDENTIALS.PARSE_SESSION
}
});
},
get:function(id){
return $http.get('https://api.parse.com/1/classes/Programme/'+id,{
headers:{
'X-Parse-Application-Id': PARSE_CREDENTIALS.APP_ID,
'X-Parse-REST-API-Key':PARSE_CREDENTIALS.REST_API_KEY,
'X-Parse-Session-Token': PARSE_CREDENTIALS.PARSE_SESSION
}
});
},
create:function(data){
return $http.post('https://api.parse.com/1/classes/Programme',data,{
headers:{
'X-Parse-Application-Id': PARSE_CREDENTIALS.APP_ID,
'X-Parse-REST-API-Key':PARSE_CREDENTIALS.REST_API_KEY,
'X-Parse-Session-Token': PARSE_CREDENTIALS.PARSE_SESSION,
'Content-Type':'application/json'
}
});
},
edit:function(id,data){
return $http.put('https://api.parse.com/1/classes/Programme/'+id,data,{
headers:{
'X-Parse-Application-Id': PARSE_CREDENTIALS.APP_ID,
'X-Parse-REST-API-Key':PARSE_CREDENTIALS.REST_API_KEY,
'X-Parse-Session-Token': PARSE_CREDENTIALS.PARSE_SESSION,
'Content-Type':'application/json'
}
});
},
delete:function(id){
return $http.delete('https://api.parse.com/1/classes/Programme/'+id,{
headers:{
'X-Parse-Application-Id': PARSE_CREDENTIALS.APP_ID,
'X-Parse-REST-API-Key':PARSE_CREDENTIALS.REST_API_KEY,
'X-Parse-Session-Token': PARSE_CREDENTIALS.PARSE_SESSION,
'Content-Type':'application/json'
}
});
}
}
}])
Run Code Online (Sandbox Code Playgroud)
显然这个x4很乱.
所以我需要将URL更改/Programmes为/Users /Prescription
我这样称呼来自我的控制器:
Programme.edit($localStorage.programme.id, {exerciseData:exercises}).success(function(data){
});
Run Code Online (Sandbox Code Playgroud)
其次,我如何根据Javascript SDK将错误处理程序标记到此控制器函数上?
1)使用拦截器清理您的网址代码:将以下内容放入您的app.js中
$httpProvider.interceptors.push(function ($q) {
return {
request: function(config) {
if (config.url.split('/')[0] === 'api'){
config.url = 'http://yourserverurl:3000/' + config.url.replace('api/', '');
}
return config || $q.when(config);
}
};
});
Run Code Online (Sandbox Code Playgroud)
2)在你的url请求中,你现在可以通过简单的api/class调用来修改它们,你可以提供classname作为参数来重用相同的函数.例:
create:function(classname, data){
return $http.post('api/' + classname, data, {
headers:{
'X-Parse-Application-Id': PARSE_CREDENTIALS.APP_ID,
'X-Parse-REST-API-Key':PARSE_CREDENTIALS.REST_API_KEY,
'X-Parse-Session-Token': PARSE_CREDENTIALS.PARSE_SESSION,
'Content-Type':'application/json'
}
});
},
Run Code Online (Sandbox Code Playgroud)
3)对于promise的错误处理,只需使用.error(errFunc)示例:
Programme.edit($localStorage.programme.id, { exerciseData:exercises }).success(function(data){
}).error(function(response){ ... };
Run Code Online (Sandbox Code Playgroud)
ps对于1和2,请确保将$ httpProvider添加到app.js中的.config中
你是这个意思吗?
.factory('Programme',['$http','PARSE_CREDENTIALS',function($http,PARSE_CREDENTIALS){
var baseUrl = 'https://api.parse.com/1/classes/';
return {
provider:function(type) {
return {
getAll:function(){
return $http.get(getUrl(type),getParams());
},
get:function(id){
return $http.get(getUrl(type)+id,getParams());
},
create:function(data){
return $http.post(getUrl(type),data,getParams());
},
edit:function(id,data){
return $http.put(getUrl(type)+id,data,getParams());
},
delete:function(id){
return $http.delete(getUrl(type)+id,getParams());
}
}
function getUrl(type) {
return baseUrl+type;
}
function getParams() {
return {
headers:{
'X-Parse-Application-Id': PARSE_CREDENTIALS.APP_ID,
'X-Parse-REST-API-Key':PARSE_CREDENTIALS.REST_API_KEY,
'X-Parse-Session-Token': PARSE_CREDENTIALS.PARSE_SESSION,
'Content-Type':'application/json'
}
}
}
}
}
}])
Run Code Online (Sandbox Code Playgroud)
然后你可以这样称呼它:
Programme.provider('Prescription/').edit($localStorage.programme.id, {exerciseData:exercises}).success(function(data){
}).error(function(response){ ... };
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
925 次 |
| 最近记录: |