Skip to content

Instantly share code, notes, and snippets.

@guo-yu
Last active March 17, 2016 02:31
Show Gist options
  • Save guo-yu/5908791 to your computer and use it in GitHub Desktop.
Save guo-yu/5908791 to your computer and use it in GitHub Desktop.
使用Angular进行ngResource模块的注入,并组织一个Store模块进行数据的获取,写入和分析
html(ng-app="app")
head
title demo
body
#wrap(ng-controller="myCtrl")
h1 我是 {{me.name}} , 我已经 {{me.age}} 岁了
// 注册app
var app = angular.module('app', ['store']);
// 定义这个数据仓库
var store = angular.module('store', ['ngResource']).factory('Store', function($resource) {
return {
// define user api
user: $resource('/user/:id', {id:'@uid'}),
// define article api
article : $resource('/article/:id', {id:'@aid'}),
// define jsonp api
remote : $resource('/remoteData/:id', {id:'@rid'},{
jsonp :{
method:'JSONP',
params:{
yourKey: 'yourValue'
}
}
})
}
})
// 在ctrler里使用这个Store获取数据
var myCtrl = function($scope, Store) {
// fetch a user target
var user = Store.user.get({uid:123}, function() {
// 填入数据
$scope.me = user;
// 写入新数据
user.abc = true;
// 会执行post请求
user.$save();
// console.log this user
console.log(user)
});
})
@guo-yu
Copy link
Author

guo-yu commented Jul 2, 2013

是这样的:

  1. 首先在需要使用到的dom上声明app,比如在html标签上声明:html(ng-app="app")
  2. 然后再需要用到的dom上绑定ctrl,比如 #header(ng-controller="myCtrl")
  3. 这样这个dom其实就和这个ctrl的 $scope 进行了绑定。你可以在这个ctrl 里利用这个 Store进行数据操作,然后填入到 $scope 里,angular会自动对dom进行更新。

解释几个疑问:

  1. 需要在注册模块的时候声明依赖,我这里忘写了,也可以写在最后。
  2. $resource('/article/:id', {id:'@uid'}) 是一个对象,这个对象有许多原型方法,通过这些配置,决定了Store模块会请求这个url /article/:id' ,这个 :id 如果你用过express ,会发现这是一个placeholder,这个placeholder 在哪里使用呢?下边这个uid,就是我们刚才声明的placeholder. 本质是为了在使用原型方法的时候传参。
var user = Store.user.get({uid:123}, function() {
    user.abc = true;
    // 会执行post请求
    user.$save();
    // console.log this user
    console.log(user)
  });
  1. user.abc = true 是在修改拿到数据的值,然后再使用原型方法$save直接POST请求该url提交数据。免除再写回调。
  2. 默认回调是成功时候的状态,失败的情况是最后一个回调(默认是不写的)
var user = Store.user.get({uid:123}, function() {
    user.abc = true;
    // 会执行post请求
    user.$save();
    // console.log this user
    console.log(user)
  },function(err){
     console.log(' request fail !!!! ')
  });

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment