三种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 相关文章推荐
论坛特效代码收集(落伍转发-不错)
Dec 02 Javascript
javascript下过滤数组重复值的代码
Sep 10 Javascript
firefox firebug中文入门教程 脚本之家新年特别版
Jan 02 Javascript
jQuery中对节点进行操作的相关介绍
Apr 16 Javascript
了解了这些才能开始发挥jQuery的威力
Oct 10 Javascript
javascript操作excel生成报表示例
May 08 Javascript
Javascript 读取操作Sql中的Xml字段
Oct 09 Javascript
js实现延迟加载的方法
Jun 24 Javascript
JQuery.validate在ie8下不支持的快速解决方法
May 18 Javascript
EXT中单击button按钮grid添加一行(光标位置可设置)的实例代码
Jun 02 Javascript
基于JS如何实现类似QQ好友头像hover时显示资料卡的效果(推荐)
Jun 09 Javascript
详解webpack4之splitchunksPlugin代码包分拆
Dec 04 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
php 提速工具eAccelerator 配置参数详解
2010/05/16 PHP
CentOS 6.2使用yum安装LAMP以及phpMyadmin详解
2013/06/17 PHP
php使用websocket示例详解
2014/03/12 PHP
YII Framework框架教程之缓存用法详解
2016/03/14 PHP
PHP实现递归目录的5种方法
2016/10/27 PHP
在Javascript里访问SharePoint列表数据的实现方法
2011/05/22 Javascript
jquery二级导航内容均分的原理及实现
2013/08/13 Javascript
Jquery getJSON方法详细分析
2013/12/26 Javascript
jQuery侧边栏实现代码
2016/05/06 Javascript
React-Native中props具体使用详解
2017/09/04 Javascript
ztree实现左边动态生成树右边为内容详情功能
2017/11/03 Javascript
微信小程序支付功能 php后台对接完整代码分享
2018/06/12 Javascript
详解Howler.js Web音频播放终极解决方案
2020/08/23 Javascript
基于Vue3.0开发轻量级手机端弹框组件V3Popup的场景分析
2020/12/30 Vue.js
[35:44]2014 DOTA2华西杯精英邀请赛 5 24 iG VS VG
2014/05/26 DOTA
Python中关于使用模块的基础知识
2015/05/24 Python
人生苦短我用python python如何快速入门?
2018/03/12 Python
python版opencv摄像头人脸实时检测方法
2018/08/03 Python
Python3 读、写Excel文件的操作方法
2018/10/20 Python
Python设计模式之工厂方法模式实例详解
2019/01/18 Python
Python实现求两个数组交集的方法示例
2019/02/23 Python
python中比较两个列表的实例方法
2019/07/04 Python
Python高级编程之消息队列(Queue)与进程池(Pool)实例详解
2019/11/01 Python
如何更改 pandas dataframe 中两列的位置
2019/12/27 Python
如何卸载python插件
2020/07/08 Python
微信小程序实现可实时改变转速的css3旋转动画实例代码
2018/09/11 HTML / CSS
Nicole Miller官方网站:纽约女装品牌
2019/09/14 全球购物
阿姆斯特丹城市卡:Amsterdam Pass
2019/12/01 全球购物
夜大毕业生自我鉴定
2013/10/31 职场文书
清洁工表扬信
2014/01/08 职场文书
明信片寄语大全
2014/04/08 职场文书
小学社会实践活动总结
2014/07/03 职场文书
2014法院干警廉洁警示教育思想汇报
2014/09/13 职场文书
护士长2014年终工作总结
2014/11/11 职场文书
2016学习依法治国心得体会
2016/01/15 职场文书
win11系统中dhcp服务异常什么意思? Win11 DHCP服务异常修复方法
2022/04/08 数码科技