angular1的 伪MVC
以下的代码是自己对angular1的一些理解。如果非要按照mvc的这种模式开发。。可以用以下的这种方式理解。 //userFactorys.js 这是服务方法 return 的方法取得json数据里的值 按照我的理解他属于 Model里的静态方法 也就是MVC中的M
var app = angular.module('appFactorys',[]); app.factory('Movies',['$http',function($http){
var getMoveies = function(page){
return $http({
method: 'GET',
url: 'http://localhost:3000/moves?page='+page,
cache:false
})
}
return {
programs:function(page){
return getMoveies(page);
}
}
}])
//userControllers.js 这是控制器方法 我个人理解他的 作用是 把从服务器取到的Json文件交给本身的 作用域 在让模板循环出来 相当于MVC中的C
var app = angular.module('app',['appFactorys','appDirectives']); //依赖服务模块,和指令模块(自定义对应 指定module)
app.controller('getMovie',['$scope','Movies',function($scope,selMovie){
selMovie.programs(2).success(function(datas, status) { //服务模块里的方法
$scope.Moives = datas; //把获取到的数据库获取的数据交给 作用域
console.log(datas)
}).error(function(data,status){
console.log('error',status)
});
}])
//userDirectives.js 这是指令,使用了getMovie控制器(Controller);这个时候利用getMovie控制器作用域里的$scope.Moives。值交给该模板Movies.html渲染页面 个人理解相当于MVC中的V
var app = angular.module('appDirectives',['app','appFactorys']);
app.directive('movies',function(){
return {
restrict: 'E',
templateUrl: '/angularJs/Movies.html',
replace: false,
transclude: true,
controller:'getMovie',
}
});
//这是movies模板 自己领会 (/angularJs/Movies.html)
<div class="row">
<div ng-repeat="movie in Moives" class="col-md-12 " style="box-sizing: border-box; padding: 10px; ">
<div style="background: #f3f3f3; padding: 10px; border-radius: 5px; list-style: none;">
<div class="row">
<div class="col-md-1" style="text-align: center;"><img src="/torrent/{{movie._id}}/{{movie.title}}.jpg"></div>
<div class="col-md-11">
<ul style="list-style: none;">
<li title="{{movie.title}}">影片名:<span style="color: red;">{{movie.title}}</span></li>
<li>标签:<span ng-repeat="tag in movie.tags"> {{tag}} </span></li>
<li>出产年月:{{movie.particularYear}}</li>
<li>地区:<span ng-repeat="region in movie.regions"> {{region}} </span></li>
<li>imdb:{{movie.imdb}}</li>
</ul>
</div>
</div>
</div>
</div>
</div>
以上是MVC化 ,接下来将执行单页面程序化
1、这里需要导入 angular-route.js
2、测试用到两个 json
稍微将 userFactorys.js 改变一下
var app = angular.module('appFactorys',[]); app.factory('Movies',['$http',function($http){
return {
programs:function(page){ //这个方法是查询指定页面电影的所有json数据
return $http({
method: 'GET',
url: 'http://localhost:3000/moves?page='+page,
cache:false
});
},
movieCount:function(){ //这个页面则是查询一共有多少页的电影数据 用来做翻页操作。
return $http({
method: 'GET',
url: 'http://localhost:3000/moc',
cache:false
})
}
}
}])
此时的 userControllers.js 应该是这样的
var app = angular.module('appController',['appFactorys','appDirectives']);
app.controller('getMovie',['$scope','Movies','$routeParams',function($scope,selMovie,$routeParams){ $routeParams.page = $routeParams.page ? $routeParams.page : 1; var promise = selMovie.programs($routeParams.page).then(function(req){
$scope.Moives = req.data
return selMovie.movieCount();
}).then(function(req){
$scope.MoivesCount = req.data;
console.log($scope.MoivesCount,$scope.Moives)
}) }])
要把原来的方法promise化。 这样作用域 Moives 和 MoivesCount 将会同时有值 (因为查询json同时!) promise化很重要
而 $routeParams.page 这个参数 是路由传过来的
路由 :userRouter.js
var remoteCamera = angular.module('app',['ngRoute','appController'])
.config(['$routeProvider',function($routeProvider) {
$routeProvider.when("/movies/:page", {
template: '<movies></movies>'
}).otherwise({
redirectTo: "/movies/1"
})
}]);
需要依赖于ngRoute 那么这个时候 指定路径 /movies/:page
1、page就是给controller 传过去的值 举例 :路径-> /movies/2就告诉了controller 去走第二页方法那么controller 会告诉服务去找相对json数据
返回给 temolate 模板 这个时候模板套用了 <movies></movies> 那么这个标签已经在指令中调整 渲染页面
2、此时的html页面应该是这样的
<div ng-view></div>
同 1 服务 -》 控制器 -》 模板 -》 渲染给 ng-view
angular1的 伪MVC的更多相关文章
- 自己动手写一个简单的MVC框架(第一版)
一.MVC概念回顾 路由(Route).控制器(Controller).行为(Action).模型(Model).视图(View) 用一句简单地话来描述以上关键点: 路由(Route)就相当于一个公司 ...
- 谈谈JavaScript MVC模式
第一个是:没有使用mvc模式的: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "h ...
- 今日思考:MVC系列框架之Struts存在的意义是什么?
Struts其实就是MVC的代名词,那么提到MVC就不得不提早期的ModelⅠ.那时候JSP页面中混杂了大量的JAVA Scriptlet脚本语句,为了可维护性考虑,有人提出了ModelⅡ,也即现在的 ...
- 蒋金楠How ASP.NET MVC Works?[持续更新中…]
一.ASP.NET + MVC IIS与ASP.NET管道 MVC.MVP以及Model2[上篇] MVC.MVP以及Model2[下篇] ASP.NET MVC是如何运行的[1]: 建立在“伪”M ...
- How ASP.NET MVC Works?
原文地址:http://www.cnblogs.com/artech/archive/2012/04/10/how-mvc-works.html?ADUIN=7783008&ADSESSION ...
- Angular1和Aangular4剖析
字面解析: 1.Angular1又名angularJs,从angular2,angular4都不带JS 2.变化:angular2跳转到angular4 架构: 1.angular1是基于MVC 2. ...
- (转)深入研究 蒋金楠(Artech)老师的 MiniMvc(迷你 MVC),看看 MVC 内部到底是如何运行的
原文地址:http://www.cnblogs.com/Music/p/mini-mvc.html (含代码) ASP.NET MVC是如何运行的[1]: 建立在“伪”MVC框架上的Web应用 地址: ...
- How ASP.NET MVC Works ? (Artech)
一.ASP.NET + MVC IIS与ASP.NET管道 MVC.MVP以及Model2[上篇] MVC.MVP以及Model2[下篇] ASP.NET MVC是如何运行的[1]: 建立在“伪”MV ...
- 全栈设计模式套餐MVVM, RESTful, MVC的历史探索
众所周知, 软件开发时遵守一个规范的设计模式非常重要, 学习行业内主流的design pattern往往能够为你节省大部分时间. 根据我2年的全栈经验, 在Web应用程序领域最流行的, 并且若干年内不 ...
随机推荐
- WPF TriggerAction弹出子窗体 TargetedTrigger、TargetedTriggerAction用法
namespace TriggerAction { public class OpenWindowAction : TriggerAction<DependencyObject> { pu ...
- Schema validation found non-datatype errors
Private Sub UpdateClaim(ByVal Status As String, ByVal Request As String) '======================' Im ...
- 论文研读之Spinnaker
论文:Using Paxos to Build a Scalable, Consistent, and Highly Available Datastore Motivation 可扩展性: 随着数据 ...
- mysql--MySQL数据库的简单认识
一.MySQL介绍 1.mysql版本 双授权版本:社区版(完全免费,功能也够nb了)和商业版(更好,功能更多更强大一些,但是收费,VIP,有售后服务,也会参考和吸收社区版的一些nb的功能,安全性和稳 ...
- Python(序列化json,pickle,shelve)
序列化 参考:https://www.cnblogs.com/yuanchenqi/articles/5732581.html # dic = str({'1':'111'}) # # f = ope ...
- RecyclerView的通用适配器
本来这一个主题应该早就写了,只是项目多,属于自己的时间不多,所以现在才开动!! 前一段时间写了一篇文章,是关于ListView,GriView万能适配器,没有看过的同学,可以先看看那篇文章,然后在来学 ...
- mongodb 3.0下载安装、配置及mongodb最新特性、基本命令教程详细介绍
mongoDB简介(本文由www.169it.com搜集整理) MongoDB是一个高性能,开源,无模式的文档型数据库,是目前在IT行业非常流行的一种非关系型数据库(NoSql).它在许多场景下可用于 ...
- 序列化库MessagePack应用(C++)
介绍 MessagePack(简称msgpack)是一个小巧而高效的序列化/反序列化库,支持多种开发语言.官方网站:http://msgpack.org/ . 下面是官方的一个简介: It's lik ...
- SpringBoot整合MyBatis及Thymeleaf
http://www.cnblogs.com/ludashi/archive/2017/05/08/6669133.html 上篇博客我们聊了<JavaEE开发之SpringBoot工程的创建. ...
- c语言中变量/函数命名以单下划线(_)和双下划线(__) 开头的意义
以单下划线(_)表明是标准库的变量 双下划线(__) 开头表明是编译器的变量 建议自己在命名的时候不要用下划线开头,避免与标准库中的命名冲突 命名方法有好多,何必为自己找不自在呢.