三种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 入门·JavaScript 具有全范围的运算符
Oct 01 Javascript
JS中不为人知的五种声明Number的方式简要概述
Feb 22 Javascript
JavaScript实现表格排序方法
Jun 14 Javascript
JavaScript开发人员的10个关键习惯小结
Dec 05 Javascript
js实现带缓冲效果的仿QQ面板折叠菜单代码
Sep 06 Javascript
jQuery实现鼠标经过像翻页和描点链接效果
Aug 08 Javascript
jQuery实用小技巧_输入框文字获取和失去焦点的简单实例
Aug 25 Javascript
bootstrap提示标签、提示框实现代码
Dec 28 Javascript
Bootstarp 基础教程之表单部分实例代码
Feb 03 Javascript
js图片轮播插件的封装
Jul 21 Javascript
基于node.js之调试器详解
Aug 22 Javascript
利用angular、react和vue实现相同的面试题组件
Feb 19 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实现小型站点广告管理
2006/10/09 PHP
php采集速度探究总结(原创)
2008/04/18 PHP
PHP通过文件保存和更新信息的方法分析
2019/09/12 PHP
javascript算法学习(直接插入排序)
2011/04/12 Javascript
jquery 清空file域示例(兼容个浏览器)
2013/10/11 Javascript
在Firefox下js select标签点击无法弹出
2014/03/06 Javascript
javascript学习笔记(二)数组和对象部分
2014/09/30 Javascript
JQuery中DOM事件合成用法实例分析
2015/06/13 Javascript
js带前后翻页的图片切换效果代码分享
2015/09/08 Javascript
JavaScript脚本库编写的方法
2015/12/09 Javascript
在IE8上JS实现combobox支持拼音检索功能
2016/05/23 Javascript
在vue项目中使用element-ui的Upload上传组件的示例
2018/02/08 Javascript
javascript动态创建对象的属性详解
2018/11/07 Javascript
ES6基础之字符串和函数的拓展详解
2019/08/22 Javascript
微信小程序 下拉刷新及上拉加载原理解析
2019/11/06 Javascript
[03:36]2014DOTA2 TI小组赛综述 八强诞生进军钥匙球馆
2014/07/15 DOTA
python查找目录下指定扩展名的文件实例
2015/04/01 Python
python3+PyQt5实现拖放功能
2018/04/24 Python
python实现将读入的多维list转为一维list的方法
2018/06/28 Python
Python设计模式之享元模式原理与用法实例分析
2019/01/11 Python
Python 自动登录淘宝并保存登录信息的方法
2019/09/04 Python
WxPython实现无边框界面
2019/11/18 Python
matplotlib quiver箭图绘制案例
2020/04/17 Python
numpy矩阵数值太多不能全部显示的解决
2020/05/14 Python
Python 如何调试程序崩溃错误
2020/08/03 Python
HTML5实现页面切换激活的PageVisibility API使用初探
2016/05/13 HTML / CSS
医院门卫岗位职责
2013/12/30 职场文书
网站客服岗位职责
2014/04/05 职场文书
捐款倡议书怎么写
2014/05/13 职场文书
中学生关于梦想的演讲稿
2014/08/22 职场文书
2014年加油站工作总结
2014/12/04 职场文书
2016年“5.12”护士节致辞
2015/07/31 职场文书
2017大学生寒假社会实践心得体会
2016/01/14 职场文书
python 统计代码耗时的几种方法分享
2021/04/02 Python
JavaWeb Servlet实现网页登录功能
2021/07/04 Java/Android
图文详解matlab原始处理图像几何变换
2021/07/09 Python