AngularJS数据源的多种获取方式汇总


Posted in Javascript onFebruary 02, 2016

AngularJS 简介

AngularJS 是由 Google 发起的一款开源的前端 MVC 脚本框架,既适合做普通 WEB 应用也可以做 SPA(单页面应用,所有的用户操作都在一个页面中完成)。与同为 MVC 框架的 Dojo 的定位不同,AngularJS 在功能上更加轻量,而相比于 jQuery,AngularJS 又帮您省去了许多机械的绑定工作。在一些对开发速度要求高,功能模块不需要太丰富的非企业级 WEB 应用上,AngularJS 是一个非常好的选择。AngularJS 最为复杂同时也是最强大的部分就是它的数据绑定机制,这个机制帮助我们能更好的将注意力集中在数据的模型建立和传递上,而不是对底层的 DOM 进行低级的操作。

在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 相关文章推荐
广告显示判断
Aug 31 Javascript
ExtJS Ext.MessageBox.alert()弹出对话框详解
Apr 02 Javascript
jQuery中绑定事件的命名空间详解
Apr 05 Javascript
javascript预加载图片、css、js的方法示例介绍
Oct 14 Javascript
js文本框输入点回车触发确定兼容IE、FF等
Nov 19 Javascript
深入理解javascript严格模式(Strict Mode)
Nov 28 Javascript
jquery实现可自动判断位置的弹出层效果代码
Oct 12 Javascript
jquery中取消和绑定hover事件的实现代码
Jun 02 Javascript
jQuery ui autocomplete选择列表被Bootstrap模态窗遮挡的完美解决方法
Sep 23 Javascript
使用bat打开多个cmd窗口执行gulp、node
Feb 17 Javascript
angularjs实现上拉加载和下拉刷新数据功能
Jun 12 Javascript
vue.js的状态管理vuex中store的使用详解
Nov 08 Javascript
多种JQuery循环滚动文字图片效果代码
Jun 23 #Javascript
三种AngularJS中获取数据源的方式
Feb 02 #Javascript
原生JS实现拖拽图片效果
Aug 27 #Javascript
基于jquery实现下拉框美化特效
Feb 02 #Javascript
AngularJS自动表单验证
Feb 01 #Javascript
javascript实现右侧弹出“分享到”窗口效果
Feb 01 #Javascript
AngularJS手动表单验证
Feb 01 #Javascript
You might like
PHP操作MySQL的mysql_fetch_* 函数的常见用法教程
2015/12/25 PHP
thinkPHP商城公告功能开发问题分析
2016/12/01 PHP
PHP使用preg_split()分割特殊字符(元字符等)的方法分析
2017/02/04 PHP
Yii2实现ActiveForm ajax提交
2017/05/26 PHP
TopList标签和JavaScript结合两例
2007/08/12 Javascript
Extjs学习笔记之三 extjs form更多的表单项
2010/01/07 Javascript
jquery tab插件精简版分享
2011/09/10 Javascript
jquery中dom操作和事件的实例学习 下拉框应用
2011/12/01 Javascript
Node.js与Sails ~项目结构与Mvc实现及日志机制
2015/10/14 Javascript
jQuery文字横向滚动效果的实现代码
2016/05/31 Javascript
jquery对象和DOM对象的相互转换详解
2016/10/18 Javascript
利用Js+Css实现折纸动态导航效果实例源码
2017/01/25 Javascript
基于node.js制作简单爬虫教程
2017/06/29 Javascript
微信小程序之GET请求的实例详解
2017/09/29 Javascript
webpack external模块的具体使用
2018/03/10 Javascript
解决vue 绑定对象内点击事件失效问题
2018/09/05 Javascript
js删除对象/数组中null、undefined、空对象及空数组方法示例
2018/11/14 Javascript
vue element-ui table组件动态生成表头和数据并修改单元格格式 父子组件通信
2019/08/15 Javascript
Vue移动端用淘宝弹性布局lib-flexible插件做适配的方法
2020/05/26 Javascript
通过vue.extend实现消息提示弹框的方法记录
2021/01/07 Vue.js
Python中的is和id用法分析
2015/01/26 Python
Python中字典的浅拷贝与深拷贝用法实例分析
2018/01/02 Python
解决python测试opencv时imread导致的错误问题
2019/01/26 Python
解决Python3 抓取微信账单信息问题
2019/07/19 Python
Python将视频或者动态图gif逐帧保存为图片的方法
2019/09/10 Python
美国价格实惠的在线眼镜网站:Zeelool
2020/12/25 全球购物
人事行政主管岗位职责
2013/12/22 职场文书
长辈证婚人证婚词
2014/01/09 职场文书
副科级后备干部考察材料
2014/05/15 职场文书
伦敦奥运会的口号
2014/06/21 职场文书
2014年四风个人对照检查及整改措施
2014/10/28 职场文书
2014年机关党建工作总结
2014/11/11 职场文书
2014年医院后勤工作总结
2014/12/06 职场文书
企业培训简报范文
2015/07/20 职场文书
大学生活委员竞选稿
2015/11/21 职场文书
解析Java中的static关键字
2021/06/14 Java/Android