三种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操作模态窗口及父子窗口间相互传值示例
Jun 09 Javascript
使用JavaScript链式编程实现模拟Jquery函数
Dec 21 Javascript
jQuery中live()方法用法实例
Jan 19 Javascript
jQuery使用$.ajax进行即时验证的方法
Dec 08 Javascript
JavaScript使用键盘输入控制实现数字验证功能
Aug 19 Javascript
jQuery弹出窗口简单实现代码
Mar 09 Javascript
vue-cli webpack 开发环境跨域详解
May 18 Javascript
微信小程序 页面跳转传值实现代码
Jul 27 Javascript
Node.js五大应用性能技巧小结(必须收藏)
Aug 09 Javascript
Node.js 使用axios读写influxDB的方法示例
Oct 26 Javascript
微信小程序实现弹出层效果
May 26 Javascript
vue ajax 拦截原理与实现方法示例
Nov 29 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
咖啡界又出新概念,无需咖啡豆的分子咖啡
2021/03/03 咖啡文化
PHP的FTP学习(四)
2006/10/09 PHP
yii2超好用的日期组件和时间组件
2016/05/05 PHP
PHP数组相加操作及与array_merge的区别浅析
2016/11/26 PHP
老生常谈PHP面向对象之标识映射
2017/06/21 PHP
php安装扩展mysqli的实现步骤及报错解决办法
2017/09/23 PHP
php解析非标准json、非规范json的方式实例
2020/12/10 PHP
js Flash插入函数免激活代码
2009/03/31 Javascript
jquery中:input和input的区别分析
2011/07/13 Javascript
js实现简单div拖拽功能实例
2015/05/12 Javascript
JS实现的竖向折叠菜单代码
2015/10/21 Javascript
JavaScript 七大技巧(一)
2015/12/13 Javascript
js 获取站点应用名的简单实例
2016/08/18 Javascript
使用Node.js搭建静态资源服务详细教程
2017/08/02 Javascript
Node使用Sequlize连接Mysql报错:Access denied for user ‘xxx’@‘localhost’
2018/01/03 Javascript
基于vue 开发中出现警告问题去除方法
2018/01/25 Javascript
ES6学习笔记之map、set与数组、对象的对比
2018/03/01 Javascript
解决vue多个路由共用一个页面的问题
2018/03/12 Javascript
JavaScript实现美化滑块效果
2019/05/17 Javascript
使用layui定义一个模块并使用的例子
2019/09/14 Javascript
vue 自定义组件的写法与用法详解
2020/03/04 Javascript
Vant+postcss-pxtorem 实现浏览器适配功能
2021/02/05 Javascript
用Python的Django框架编写从Google Adsense中获得报表的应用
2015/04/17 Python
Python实现的圆形绘制(画圆)示例
2018/01/31 Python
Python Unittest根据不同测试环境跳过用例的方法
2018/12/16 Python
使用Tkinter制作信息提示框
2020/02/18 Python
倩碧香港官方网站:Clinique香港
2017/11/13 全球购物
Whittard官方海外旗舰店:英国百年茶叶品牌
2018/02/22 全球购物
Europcar意大利:汽车租赁
2019/07/07 全球购物
中学生在校期间的自我评价分享
2013/11/13 职场文书
大学生个人简历自我评价
2013/11/16 职场文书
2014信息技术专业毕业生自我评价
2014/01/17 职场文书
最新奶茶店创业计划书
2014/01/25 职场文书
教学质量月活动总结
2015/05/11 职场文书
微信小程序实现拍照和相册选取图片
2021/05/09 Javascript
nginx.conf配置文件结构小结
2022/04/08 Servers