angularjs_datamodel,angularjs_model
web前端-js教程
AngularJS 简介创业商机网站源码,vscode添加nuget,utfi ubuntu,tomcat和node,易语言sqlite修改字段,wordpress 电商 插件下载,前端ui框架兼容性问题,头大身子细长的爬虫,artisan php,seo引擎优化什,8php网站克隆系统,网页游戏源码如何运行,destoon关闭模板监控lzw
AngularJS 是一个 JavaScript 框架。它可通过 标签添加到 HTML 页面。短信拦截软件源码,vscode终端类型,ubuntu休眠怎么打开,tomcat web设置,sqlite接口封装,jquery弹出输入框插件,前端框架三端适配,佛山爬虫开发,php 在线加密,怎样网站seo,微信群大全网站源码,手机版网页代码大全,h5手机模板源码,html 页面升级,电话簿管理系统,淘宝客程序上架lzw
AngularJS 通过 指令 扩展了 HTML,且通过 表达式 绑定数据到 HTML。java经典编程300例源码,vscode谐音,ubuntu 修改源,tomcat指定jdk,sqlite增删改查,网页设计东莞,mssql导出数据库命令,做一个网页要服务器吗,h5 loading插件,2017主流的前端框架,床上的爬虫,php论文,seo 实战,开源springboot商城,织梦标签得到文章内容,php宾馆网站源码,html手机网页怎么写的,网站正在建设中模板 html,dede后台 乱码,html 页面跳动一下,android 管理系统 源码,单用户版开源微博程序lzw
什么是 AngularJS?AngularJS 使得开发现代的单一页面应用程序(SPAs:Single Page Applications)变得更加容易。
AngularJS 把应用程序数据绑定到 HTML 元素。
AngularJS 可以克隆和重复 HTML 元素。
AngularJS 可以隐藏和显示 HTML 元素。
AngularJS 可以在 HTML 元素”背后”添加代码。
AngularJS 支持输入验证。
通常,在AngularJS中使用JSON作为存储数据的模型。我们可能这样在controller中写model:
app.controller('BookController',['$scope',function($scope){$scope.book = {id:1,name:'',author:'',stores:[{id:1, name:'', quantity:2},{id:2, name:'', quantity:2},...]};}])在视图中也许这样用到这个model:
当我们需要从服务端获取数据的时候,可能这样写:
app.controller('BookController',['$scope', '$http', function($scope, $http){var bookId = 1;$http.get('api/books'+bookId).success(function(bookData){$scope.book = bookData;})$scope.deleteBook = function(){$http.delete('api/books/' + bookId);}$scope.updateBook = function(){$http.put('api/books/'+bookId, $scope.book);}$scope.getBookImageUrl = function(width, height){return 'our/iamge/service' +bookId + '/width/height';}$scope.isAvailable = function(){if(!$scope.book.stores || $scope.book.stores.length === 0){return false;}reutrn $scope.book.stores.some(function(store){return store.quantity > 0;})}}])在视图中可能这样使用:
以上,JSON格式的model只能在BookController中使用,如何在其他controller中也可以使用呢?</span?is available:
–通过factory方式
app.factory('Book', ['$http', function($http){function Book(bookData){if(bookData){this.setData(bookData);}}Book.prototype = {setData: function(bookData){angular.extend(this, bookData);},load: function(id){var scope = this;$http.get('api/books/' + bookId).success(function(bookData){scope.setData(bookData);})},delete: function(bookId){$http.delete('api/books/' + bookId);},update: function(bookId){$http.put('api/books/' + bookId, this);},getImageUrl: function(width, height){return 'our/image/service/' + this.book.id + '/' + width + '/' + height;},isAvailable: funciton(){if(!this.book.stores || this.book.stores.length === 0) {return false;} return this.book.stores.some(function(store){return store.quantity > 0;})}}return Book;}])以上,通过factory的方式创建了类似Book的一个Data Model,现在可以注入到controller中去了。
app.controller('BookController', ['$scope', 'Book', function($scope, Book){$scope.book = new Book();$scope.book.load(1);}])在视图中也会有相应的变化。
以上,多个controller可以使用同一个有关book的Data Model了,如果多个controller处理同一个有关book的Data Model呢?is abailble:
app.factory('booksManager', ['$http', '$q', 'Book', function($http. $q, Book){var booksManager = {_pool: {},_retrieveInstance: function(bookId, bookData){var instance = this._pool[bookId];if(instance){instance.setData(bookData);} else {instance = new Book(bookData);this._pool[bookId] = instance;}return instance;},_seach: function(bookId){reutrn this_.pool[bookId];},_load: function(bookId, deferred){var scope = this;$http.get('api/books/' + bookId).success(funciton(bookData){var book = scope._retrieveInstance(bookData.id, bookData);deferred.resolve(book);}).error(function(){deferred.reject();})},getBook: function(bookId){var deferred = $q.defer();var book = this._search(bookId);if(book){deferred.resove(book);} else {this._load(bookId, deferred);}return deferred.promise;},loadAllBooks: function(){var deferred = $q.defer();var scope = this;$http.get('api/books').success(function(booksArray){var books = [];booksArray.forEach(function(bookData){var book = scope.l_retrieveInstance(bookData.id, bookData);books.push(book);});deferred.resolve(books);}).error(function(){deferred.reject();});return deferred.promise;},setBook: function(bookData){var scope = this;var book = this._search(bookData.id);if(book){book.setData(bookData);} else {book = scope._retrieveInstance(bookData);}return book;}};return booksManager;}])Book服务去掉load方法。
app.factory('Book', ['$http', function($http) { function Book(bookData) {if (bookData) {this.setData(bookData):}// Some other initializations related to book};Book.prototype = {setData: function(bookData) {angular.extend(this, bookData);},delete: function() {$http.delete('ourserver/books/' + bookId);},update: function() {$http.put('ourserver/books/' + bookId, this);},getImageUrl: function(width, height) {return 'our/image/service/' + this.book.id + '/width/height';},isAvailable: function() {if (!this.book.stores || this.book.stores.length === 0) {return false;}return this.book.stores.some(function(store) {return store.quantity > 0;});}};return Book;}]);现在,多个controller可以使用同一个booksManager服务。
app.controller('EditableBookController',['$scope', 'booksManager', function($scope, booksManager){booksManager.getBook(1).then(function(book){$scope.book = book;})}]).controller('BooksListController',['$scope', 'booksManager', function($scope, booksManager){booksManager.loadAllBooks().then(function(books){$scope.books = books;})}])