三种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 相关文章推荐
JavaScript DOM 学习第二章 编辑文本
Feb 19 Javascript
js实现文章文字大小字号功能完整实例
Nov 01 Javascript
javascript排序函数实现数字排序
Jun 26 Javascript
整理Javascript数组学习笔记
Nov 29 Javascript
详解Matlab中 sort 函数用法
Mar 20 Javascript
非常棒的jQuery图片轮播效果
Apr 17 Javascript
用jQuery获取table中行id和td值的实现代码
May 19 Javascript
纯JS实现可用于页码更换的飞页特效示例
May 21 Javascript
JavaScript实现随机点名器实例详解
May 07 Javascript
JS开发 富文本编辑器TinyMCE详解
Jul 19 Javascript
解决layUI的页面显示不全的问题
Sep 20 Javascript
vue登录页实现使用cookie记住7天密码功能的方法
Feb 18 Vue.js
原生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导出csv数据在浏览器中输出提供下载或保存到文件的示例
2014/04/24 PHP
PHP实现的增强性mhash函数
2015/05/27 PHP
smarty高级特性之对象的使用方法
2015/12/25 PHP
PHP使用第三方即时获取物流动态实例详解
2017/04/27 PHP
解决AJAX中跨域访问出现'没有权限'的错误
2008/08/20 Javascript
jQuery EasyUI API 中文文档 - ProgressBar 进度条
2011/09/29 Javascript
jQuery 拖动层(在可视区域范围内)
2012/05/24 Javascript
javascript与cookie 的问题详解
2013/11/11 Javascript
JQuery的Ajax中Post方法传递中文出现乱码的解决方法
2014/10/21 Javascript
jQuery手机拨号界面特效代码分享
2015/08/27 Javascript
JS日期格式化之javascript Date format
2015/10/01 Javascript
JavaScript实现数据类型的相互转换
2016/03/06 Javascript
JavaScript 函数的执行过程
2016/05/09 Javascript
在Mac OS上安装使用Node.js的项目自动化构建工具Gulp
2016/06/18 Javascript
webuploader模态框ueditor显示问题解决方法
2016/12/27 Javascript
js canvas实现擦除效果示例代码
2017/04/26 Javascript
基于 webpack2 实现的多入口项目脚手架详解
2017/06/26 Javascript
微信小程序中使用echarts的实现方法
2019/04/24 Javascript
vue中使用props传值的方法
2019/05/08 Javascript
基于JavaScript实现单例模式
2019/10/30 Javascript
微信小程序换肤功能实现代码(思路详解)
2020/08/25 Javascript
python采用getopt解析命令行输入参数实例
2014/09/30 Python
Python中的super用法详解
2015/05/28 Python
详解Python之数据序列化(json、pickle、shelve)
2017/03/30 Python
Django数据库操作的实例(增删改查)
2017/09/04 Python
在Python web中实现验证码图片代码分享
2017/11/09 Python
Python单元测试简单示例
2018/07/03 Python
Python实现程序判断季节的代码示例
2019/01/28 Python
tensorflow tf.train.batch之数据批量读取方式
2020/01/20 Python
python和node.js生成当前时间戳的示例
2020/09/29 Python
CSS3实现类似翻书效果的过渡动画的示例代码
2019/09/06 HTML / CSS
525心理活动总结
2014/07/04 职场文书
文明好少年事迹材料
2014/08/19 职场文书
上班离岗检讨书
2014/09/10 职场文书
2014县委书记党的群众路线教育实践活动对照检查材料思想汇报
2014/09/22 职场文书
Nginx的gzip相关介绍
2022/05/11 Servers