三种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 相关文章推荐
JQuery 操作select标签实现代码
May 14 Javascript
简单谈谈jQuery(function(){})与(function(){})(jQuery)
Dec 19 Javascript
js仿支付宝填写支付密码效果实现多方框输入密码
Mar 09 Javascript
基于JavaScript实现 网页切出 网站title变化代码
Apr 03 Javascript
JavaScript 字符串常用操作小结(非常实用)
Nov 30 Javascript
jquery中关于bind()方法的使用技巧分享
Mar 30 jQuery
vue2.0路由切换后页面滚动位置不变BUG的解决方法
Mar 14 Javascript
JavaScript求一个数组中重复出现次数最多的元素及其下标位置示例
Jul 23 Javascript
IE8中jQuery.load()加载页面不显示的原因
Nov 15 jQuery
JavaScript遍历数组的方法代码实例
Jan 14 Javascript
jquery添加div实现消息聊天框
Feb 08 jQuery
js this 绑定机制深入详解
Apr 30 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中日期加减法运算实现代码
2011/12/08 PHP
smarty模板引擎中自定义函数的方法
2015/01/22 PHP
PHP获取文件夹大小函数用法实例
2015/07/01 PHP
PHP如何读取由JavaScript设置的Cookie
2017/03/22 PHP
thinkPHP微信分享接口JSSDK用法实例
2017/07/07 PHP
yii2 上传图片的示例代码
2018/11/02 PHP
一实用的实现table排序的Javascript类库
2007/09/12 Javascript
JavaScript入门教程(2) JS基础知识
2009/01/31 Javascript
jQuery教程 $()包装函数来实现数组元素分页效果
2013/08/13 Javascript
JS Date函数整理方便使用
2013/10/23 Javascript
bootstrap使用validate实现简单校验功能
2016/12/02 Javascript
js实现图片切换(动画版)
2016/12/25 Javascript
Vue分页组件实例代码
2017/04/17 Javascript
angularjs实现简单的购物车功能
2017/09/21 Javascript
vue2.0s中eventBus实现兄弟组件通信的示例代码
2017/10/25 Javascript
vuejs选中当前样式active的实例
2018/08/22 Javascript
Element-ui tree组件自定义节点使用方法代码详解
2018/09/17 Javascript
js限制输入框只能输入数字(onkeyup触发)
2018/09/28 Javascript
微信小程序之裁剪图片成圆形的实现代码
2018/10/11 Javascript
Django实现快速分页的方法实例
2017/10/22 Python
Python 对输入的数字进行排序的方法
2018/06/23 Python
python图片指定区域替换img.paste函数的使用
2020/04/09 Python
5款实用的python 工具推荐
2020/10/13 Python
python实现代码审查自动回复消息
2021/02/01 Python
Html5监听手机摇一摇事件的实现
2019/11/07 HTML / CSS
Kent & Curwen:与大卫·贝克汉姆合作
2017/06/13 全球购物
巴基斯坦电子产品购物网站:Home Shopping
2017/09/14 全球购物
干部考核评语
2014/04/29 职场文书
2015年工程部工作总结
2015/04/30 职场文书
2015年小学体育工作总结
2015/05/22 职场文书
农村婚礼司仪主持词
2015/06/29 职场文书
《月光曲》教学反思
2016/02/16 职场文书
html5中sharedWorker实现多页面通信的示例代码
2021/05/07 Javascript
DBCA命令行搭建Oracle ADG的流程
2021/06/11 Oracle
eclipse创建项目没有dynamic web的解决方法
2021/06/24 Java/Android
正则表达式拆分url实例代码
2022/02/24 Java/Android