三种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读取RSS数据
Jan 20 Javascript
JavaScript中Math对象方法使用概述
Jan 02 Javascript
JavaScript列表框listbox全选和反选的实现方法
Mar 18 Javascript
JavaScript实现在页面间传值的方法
Apr 07 Javascript
javascript实现别踩白块儿小游戏程序
Nov 22 Javascript
javascript实现的左右无缝滚动效果
Sep 19 Javascript
jQuery实现导航滚动到指定内容效果完整实例【附demo源码下载】
Sep 20 Javascript
jQuery实现花式轮播之圣诞节礼物传送效果
Dec 25 Javascript
jQuery实现单击按钮遮罩弹出对话框效果(2)
Feb 20 Javascript
新版vue-cli模板下本地开发环境使用node服务器跨域的方法
Apr 03 Javascript
Vue.js组件props数据验证实现详解
Oct 19 Javascript
解决三元运算符 报错“SyntaxError: can''t assign to conditional expression”
Feb 12 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 字符串分割和比较
2009/10/06 PHP
php将session放入memcached的设置方法
2014/02/14 PHP
PHP微信开发之查询微信精选文章
2016/06/23 PHP
浅谈mysql_query()函数的返回值问题
2016/09/05 PHP
PHP实现二维数组去重功能示例
2017/01/12 PHP
改进:论坛UBB代码自动插入方式
2006/12/22 Javascript
看了就知道什么是JSON
2007/12/09 Javascript
js Function类型
2011/12/04 Javascript
jQuery实现高亮显示的方法
2015/03/10 Javascript
基于ajax与msmq技术的消息推送功能实现代码
2016/12/26 Javascript
Bootstrap table 定制提示语的加载过程
2017/02/20 Javascript
ES6正则表达式的一些新功能总结
2017/05/09 Javascript
Angularjs 根据一个select的值去设置另一个select的值方法
2018/08/13 Javascript
Vuex 使用 v-model 配合 state的方法
2018/11/13 Javascript
express框架下使用session的方法
2019/07/31 Javascript
vue v-for出来的列表,点击某个li使得当前被点击的li字体变红操作
2020/07/17 Javascript
浅谈Python中数据解析
2015/05/05 Python
基于python代码实现简易滤除数字的方法
2018/07/17 Python
python 实现数字字符串左侧补零的方法
2018/12/04 Python
python如何提升爬虫效率
2020/09/27 Python
Python通过yagmail实现发送邮件代码解析
2020/10/27 Python
纯CSS和jQuery实现的在页面顶部显示的进度条效果2例(仿手机浏览器进度条效果)
2014/04/16 HTML / CSS
美国从事品牌鞋类零售的连锁店:Famous Footwear
2016/08/25 全球购物
财务经理岗位职责
2013/11/09 职场文书
水污染治理专业毕业生推荐信
2013/11/14 职场文书
优秀班干部事迹材料
2014/01/26 职场文书
大学辅导员事迹材料
2014/02/05 职场文书
商学院大学生求职的自我评价
2014/03/12 职场文书
护士求职信
2014/07/05 职场文书
二手车转让协议书
2015/01/29 职场文书
中秋节慰问信
2015/02/15 职场文书
三八妇女节寄语
2015/02/27 职场文书
2015年成本会计工作总结
2015/10/14 职场文书
导游词之黄果树瀑布
2019/09/20 职场文书
pandas数值排序的实现实例
2021/07/25 Python
Jedis操作Redis实现模拟验证码发送功能
2021/09/25 Redis