三种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 相关文章推荐
js清空form表单中的内容示例
May 20 Javascript
javascript作用域问题实例分析
Jul 13 Javascript
js实现带有介绍的Select列表菜单实例
Aug 18 Javascript
jqueryMobile使用示例分享
Jan 12 Javascript
js+canvas简单绘制圆圈的方法
Jan 28 Javascript
JavaScript中创建对象的模式汇总
Apr 19 Javascript
js事件源window.event.srcElement兼容性写法(详解)
Nov 25 Javascript
利用纯JS实现像素逐渐显示的方法示例
Aug 14 Javascript
在JS循环中使用async/await的方法
Oct 12 Javascript
ionic4+angular7+cordova上传图片功能的实例代码
Jun 19 Javascript
JavaScript中变量提升机制示例详解
Dec 27 Javascript
Vue + ts实现轮播插件的示例
Nov 10 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 增加了对 .ZIP 文件的读取功能
2006/10/09 PHP
php读取javascript设置的cookies的代码
2010/04/12 PHP
php设计模式 Mediator (中介者模式)
2011/06/26 PHP
解析PHP获取当前网址及域名的实现代码
2013/06/23 PHP
jQuery EasyUI API 中文文档 - NumberBox数字框
2011/10/13 Javascript
制作jquery遮罩层效果导航菜单代码分享
2013/12/25 Javascript
jquery自定义滚动条插件示例分享
2014/02/21 Javascript
js和jquery中循环的退出和继续学习记录
2014/09/06 Javascript
浅谈jQuery的offset()方法及示例分享
2015/07/17 Javascript
jQuery入门基础知识学习指南
2015/08/14 Javascript
jQuery基于函数重载实现自定义Alert函数样式的方法
2016/07/27 Javascript
JavaScript每天必学之数组和对象部分
2016/09/17 Javascript
javascript阻止事件冒泡和浏览器的默认行为
2017/01/21 Javascript
webpack打包js的方法
2018/03/12 Javascript
Vue.js 实现微信公众号菜单编辑器功能(一)
2018/05/08 Javascript
angularjs1.5 组件内用函数向外传值的实例
2018/09/30 Javascript
解决layUI的页面显示不全的问题
2019/09/20 Javascript
javascript实现异形滚动轮播
2019/11/28 Javascript
微信小程序canvas动态时钟
2020/10/22 Javascript
Vue-Ant Design Vue-普通及自定义校验实例
2020/10/24 Javascript
python绘制漏斗图步骤详解
2019/03/04 Python
django-初始配置(纯手写)详解
2019/07/30 Python
pytorch中的自定义反向传播,求导实例
2020/01/06 Python
Python qrcode 生成一个二维码的实例详解
2020/02/12 Python
Python爬虫设置ip代理过程解析
2020/07/20 Python
python使用matplotlib绘制折线图的示例代码
2020/09/22 Python
一款纯css3实现的鼠标悬停动画按钮
2014/12/29 HTML / CSS
美国最便宜的旅游网站:CheapTickets
2017/07/09 全球购物
Belvilla德国:在线预订度假屋
2018/04/10 全球购物
经济学人订阅:The Economist
2018/07/19 全球购物
农民工创业典型事迹
2014/01/25 职场文书
小学国旗下的演讲稿
2014/08/28 职场文书
2014年图书馆工作总结
2014/11/25 职场文书
蓬莱阁导游词
2015/02/04 职场文书
新教师个人总结
2015/02/06 职场文书
工程资料员岗位职责
2015/04/13 职场文书