三种AngularJS中获取数据源的方式


Posted in Javascript onFebruary 02, 2016

在AngularJS中,可以从$rootScope中获取数据源,也可以把获取数据的逻辑封装在service中,然后注入到app.run函数中,或者注入到controller中。本篇就来整理获取数据的几种方式。

■ 数据源放在$rootScope中

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

app.run(function($rootScope){
  $rootScope.todos = [
    {item:"",done:true},
    {item:"",done:false}
  ];
})


<div ng-repeat="todo in todos">
  {{todo.item}}
</div>

<form>
  <input type="text" ng-model="newTodo" />
  <input type="submit" ng-click=""todos.push({item:newTodo, done:false}) />
</form>

以上,把数据源放在$rootScope中的某个字段中,很容易被重写。

■ 数据源放在service中,把servie注入到run函数中

app.service("TodoService", function(){
  this.todos = [
    {item:"",done:true},
    {item:"",done:false}
  ];
   
})

app.run(function($rootScope, TodoService){
  $rootScope.TodoService = TodoService;
}) 

<div ng-repeat="todo in TodoService.todos">
  {{todo.item}}
</div>

<form>
  <input type="text" ng-model="newTodo" />
  <input type="submit" ng-click=""TodoService.todos.push({item:newTodo, done:false}) />
</form>

在html中似乎这样写比较好:

<input type="submit" ng-click=""TodoService.todos.addodo(newTodo) />

在service中增加一个方法:

app.service("TodoService", function(){
  this.todos = [
    {item:"",done:true},
    {item:"",done:false}
  ];
  
  this.addTodo = fucntion(newTodo){
    this.todos.push({item:newTodo, done:false})
  }
   
})

■ 数据源放在service中,把servie注入到controller中

app.controller("TodoCtrl", function($scope, TodoService){
  this.TodoService = TodoServce;
})

在对应的html中:

<body ng-app="app" ng-controller="TodoCtrl as todoCtrl">
  <div ng-repeat="todo in todoCtrl.TodoService.todos">
    {{todo.item}}
  </div>
</body>

<form>
  <input type="text" ng-model="newTodo" />
  <input type="submit" ng-click="todoCtrl.TodoService.addTodo(newTodo)"/>
</form>

■ 数据源放在service中,把servie注入到controller中,与服务端交互

在实际项目中,service还需要和服务端交互。

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

app.service("TodoService", function($q, $timeout){
  this.getTodos = function(){
    var d = $q.defer();
    
    //模拟一个请求
    $timeout(function(){
      d.resolve([
        {item:"", done:false},
        ...
      ])
    },3000);
    
    return d.promise;
  }
  
  this.addTodo = function(item){
    this.todos.push({item:item, done:false});
  }
})

app.controller("TodoCtrl", function(TodoService){
  var todoCtrl = this;
  
  TodoService.getTodos().then(function(result){
    todoCtrl.todos = result;
  })
  
  todoCtrl.addTodo = TodoService.addTodo;
})

以上就是AngularJS中获取数据源的方法,希望对大家的学习有所帮助。

Javascript 相关文章推荐
asp 的 分词实现代码
May 24 Javascript
javascript 构建一个xmlhttp对象池合理创建和使用xmlhttp对象
Jan 15 Javascript
javascript 判断数组是否已包含了某个元素的函数
May 30 Javascript
JQ技术实现注册页面带有校验密码强度
Jul 27 Javascript
jQuery使用deferreds串行多个ajax请求
Aug 22 Javascript
js数组去重的hash方法
Dec 22 Javascript
js 性能优化之快速响应的用户界面
Feb 15 Javascript
ES6中Math对象新增的方法实例详解
Apr 25 Javascript
小程序实现单选多选功能
Nov 04 Javascript
vue-cli3+typescript新建一个项目的思路分析
Aug 06 Javascript
JavaScript装箱及拆箱boxing及unBoxing用法解析
Jun 15 Javascript
使用纯前端JavaScript实现Excel导入导出方法过程详解
Aug 07 Javascript
原生JS实现拖拽图片效果
Aug 27 #Javascript
基于jquery实现下拉框美化特效
Feb 02 #Javascript
AngularJS自动表单验证
Feb 01 #Javascript
javascript实现右侧弹出“分享到”窗口效果
Feb 01 #Javascript
AngularJS手动表单验证
Feb 01 #Javascript
基于JavaScript实现动态添加删除表格的行
Feb 01 #Javascript
基于jQuery实现二级下拉菜单效果
Feb 01 #Javascript
You might like
支持oicq头像的留言簿(二)
2006/10/09 PHP
PHP 开发工具
2006/12/06 PHP
PHP session有效期问题
2009/04/26 PHP
Zend Framework使用Zend_Loader组件动态加载文件和类用法详解
2016/12/09 PHP
laravel 5.5 关闭token的3种实现方式
2019/10/24 PHP
JavaScript去掉空格的方法集合
2010/12/28 Javascript
js 动态文字滚动的例子
2011/01/17 Javascript
无闪烁更新网页内容JS实现
2013/12/19 Javascript
JavaScript中停止执行setInterval和setTimeout事件的方法
2015/05/14 Javascript
JS提示:Uncaught SyntaxError: Unexpected token ILLEGAL错误的解决方法
2016/08/19 Javascript
Ubuntu系统下Angularjs开发环境安装
2016/09/01 Javascript
Vue响应式原理详解
2017/04/18 Javascript
如何理解Vue的render函数的具体用法
2017/08/30 Javascript
详解利用 Express 托管静态文件的方法
2017/09/18 Javascript
js截取字符串功能的实现方法
2017/09/27 Javascript
webpack+vue中使用别名路径引用静态图片地址
2017/11/20 Javascript
Spring Boot/VUE中路由传递参数的实现代码
2018/03/02 Javascript
Node.JS段点续传:Nginx配置文件分段下载功能的实现方法
2018/03/12 Javascript
Vue实现手机扫描二维码预览页面效果
2020/05/28 Javascript
vue中的双向数据绑定原理与常见操作技巧详解
2020/03/16 Javascript
vue中实现拖动调整左右两侧div的宽度的示例代码
2020/07/22 Javascript
详解使用Python处理文件目录的相关方法
2015/10/16 Python
对python的文件内注释 help注释方法
2018/05/23 Python
windows下python 3.6.4安装配置图文教程
2018/08/21 Python
python list格式数据excel导出方法
2018/10/31 Python
python实现人工智能Ai抠图功能
2019/09/05 Python
Keras保存模型并载入模型继续训练的实现
2021/02/20 Python
css3闪亮进度条效果实现思路及代码
2013/04/17 HTML / CSS
Maje德国官网:法国女性成衣品牌
2017/02/10 全球购物
会计专业自荐信
2013/12/02 职场文书
卫生系统先进事迹
2014/05/13 职场文书
致地震灾区的慰问信
2015/03/23 职场文书
Python Pandas pandas.read_sql_query函数实例用法分析
2021/06/21 Python
python自动化操作之动态验证码、滑动验证码的降噪和识别
2021/08/30 Python
利用Python实现Picgo图床工具
2021/11/23 Python
Python线程池与GIL全局锁实现抽奖小案例
2022/04/13 Python