angularjs课程表制作
⑴ 如何用angular ng-repeat数组遍历写出一张课程表
ng-option指令使用简单需要绑定两属性:
ng-model用于获取选定值;
另ng-options用于确定拉列表元素数组
⑵ 如何从AngularJS迁移到Vue
引用一段vuejs官方的解释。vue对比其它框架Angular选择Vue而不选择Angular,有下面几个原因,当然不是对每个人都适合:在API与设计两方面上Vue.js都比Angular简单得多,因此可以快速地掌握它的全部特性并投入开发。Vue.js是一个更加灵活开放的解决方案。它允许以希望的方式组织应用程序,而不是任何时候都必须遵循Angular制定的规则。它仅仅是一个视图层,所以可以将它嵌入一个现有页面而不一定要做成一个庞大的单页应用。在配合其他库方面它给了更大的的空间,但相应,也需要做的架构决策。例如,Vue.js核心默认不包含路由和Ajax功能,并且通常假定在应用中使用了一个模块构建系统。这可能是最重要的区别。Angular使用双向绑定,Vue也支持双向绑定,不过默认为单向绑定,数据从父组件单向传给子组件。在大型应用中使用单向绑定让数据流易于理解。在Vue.js中指令和组件分得更清晰。指令只封装DOM操作,而组件代表一个自给自足的独立单元——有自己的视图和数据逻辑。在Angular中两者有不少相混的地方。Vue.js有更好的性能,并且非常非常容易优化,因为它不使用脏检查。Angular,当watcher越来越多时会变得越来越慢,因为作用域内的每一次变化,所有watcher都要重新计算。并且,如果一些watcher触发另一个更新,脏检查循环(digestcycle)可能要运行多次。Angular用户常常要使用深奥的技术,以解决脏检查循环的问题。有时没有简单的法来优化有大量watcher的作用域。Vue.js则根本没有这个问题,因为它使用基于依赖追踪的观察系统并且异步列队更新,所有的数据变化都是独立地触发,除非它们之间有明确的依赖关系。唯一需要做的优化是在v-for上使用track-by。有意思的是,Angular2和Vue用相似的设计解决了一些Angular1中存在的问题。ReactReact.js和Vue.js确实有一些相似——它们都提供数据驱动、可组合搭建的视图组件。当然它们也有许多不同。首先,内部实现本质上不同。React的渲染建立在VirtualDOM上——一种在内存中描述DOM树状态的数据结构。当状态发生变化时,React重新渲染VirtualDOM,比较计算之后给真实DOM打补丁。VirtualDOM提供了一个函数式的方法描述视图,这真的很棒。因为它不使用数据观察机制,每次更新都会重新渲染整个应用,因此从定义上保证了视图与数据的同步。它也开辟了JavaScript同构应用的可能性。Vue.js不使用VirtualDOM而是使用真实DOM作为模板,数据绑定到真实节点。Vue.js的应用环境必须提供DOM。但是,相对于常见的误解——VirtualDOM让React比其它的都快,Vue.js实际上性能比React好,而且几乎不用手工优化。而React,为了最优化的渲染需要处处实现shouldComponentUpdate和使用不可变数据结构。在API方面,React(或JSX)的一个问题是,渲染函数常常包含大量的逻辑,最终看着更像是程序片断(实际上就是)而不是界面的视觉呈现。对于部分开发者来说,他们可能觉得这是个优点,但对那些像咱一样兼顾设计和开发的人来说,模板能让自己更好地在视觉上思考设计和CSS。JSX和JavaScript逻辑的混合干扰了自己将代码映射到设计的思维过程。相反,Vue.js通过在模板中加入一个轻量级的DSL(指令系统),换来一个依旧直观的模板,且能将逻辑封装进指令和过滤器中。React的另一个问题是:由于DOM更新完全交给VirtualDOM管理,当想要自己控制DOM时就有点棘手了(虽然理论上可以做到,但是这样做就本质上违背了React的设计思想)。如果应用需要特别的自定义DOM操作,特别是复杂时间控制的动画,这个限制就很讨厌。在这方面,Vue.js更灵活,有许多用Vue.js制作的FWA/Awwwards获奖站点。个人推荐就是,vue的入门简单,也有很多公司在用,不愁没人要,react入门难,函数式编程吓人啊。。但是真很好用。。angular不推荐学了。。
⑶ 如何用angularjs制作一个完整的表格
首先,表格采用的是BootStrap样式编辑的,主要使用的是angularjs,为了方便也有jQuery的方法,在测试时需自行引入bootstrap,angularjs和jq的文件。
整体代码预览:
HTML:
<!DOCTYPE html>
<html lang="en" ng-app="myMole">
<head>
//需要自行引入BOOTStrap,angularjs和jQuery的js,css文件
<style>
.pagination .num{
font-size:22px;color:red;
}
.text{
margin:0 auto;
border:1px solid #ccc;
width:100%;
max-width:200px;
}
</style>
<title>欢迎</title>
</head>
<body ng-controller="myCtrl">
<div class="block">
<div class="navbar navbar-inner block-header">
<div class="muted pull-left">{{kaohzbTitle}}</div>
</div>
<div class="span12" style="float:left;">
<div class="table-toolbar">
<button style="margin-left: 5px;" id="refresh" ng-click="refresh()"
class="btn btn-success">
<i class=" icon-refresh icon-white"></i> 刷新
</button>
<button ng-disabled="isdisabled" class="btn" ng-class="{'btn-info':isInfo}" id="savekaohzb"
ng-click="save()">
<i class="icon-edit icon-white"></i> 保存
</button>
</div>
</div>
<div class="row-fluid">
<div class="span6"></div>
<table class="table table-striped table-bordered table-hover"
id="example" style="margin-top:10px;">
<thead>
<tr>
<th style="width: 20px;" rowspan="2">全选 <br><input type="checkbox" ng-model="selectAll"></th>
<th style="text-align: center; width: 50px;vertical-align: middle" rowspan="2">序号</th>
<th style="text-align: center; width: 150px;vertical-align: middle" rowspan="2">名称</th>
<th style="text-align: center; width: 150px;vertical-align: middle" rowspan="2">日期</th>
<th style="text-align: center; width: 150px;" colspan="3">比赛队伍(红)</th>
<th style="text-align: center; width: 150px;" colspan="3">比赛队伍(蓝)</th>
<th style="text-align: center; width: 150px;vertical-align: middle" rowspan="2">比分</th>
<th style="text-align: center; width: 150px;vertical-align: middle" rowspan="2">说明</th>
<th style="text-align: center; width: 150px;vertical-align: middle" rowspan="2">玩家支持队伍</th>
</tr>
<tr>
<th style="text-align: center; width: 80px;">第一场</th>
<th style="text-align: center; width: 80px;">第二场</th>
<th style="text-align: center; width: 80px;">说明</th>
<th style="text-align: center; width: 80px;">第一场</th>
<th style="text-align: center; width: 80px;">第二场</th>
<th style="text-align: center; width: 80px;">说明</th>
</tr>
</thead>
<tbody ng-click="fun()" id="page" ng-show="isshow">
<!--track by tb.id-->
<tr ng-repeat="tb in saveDate"><!-- 只用angularjs实现点击一行就选中暂时无法实现 -->
<td style="width: 20px;"><input type="checkbox" ng-checked="selectAll"></td>
<td style="text-align:center;">{{tb.id}}</td>
<td style="text-align:center;">{{tb.zbname}}</td>
<td style="text-align:center;">{{tb.zbtime}}</td>
<td style="text-align:center;">{{tb.zbrul1}}</td>
<td style="text-align:center;">{{tb.zbrul2}}</td>
<td style="text-align:center;"><div class="text" contenteditable="true" ng-model="tb.por"></div></td>
<td style="text-align:center;">{{tb.zbrul2}}</td>
<td style="text-align:center;">{{tb.zbrul1}}</td>
<td style="text-align:center;"><div class="text" contenteditable="true" ng-model="tb.por"></div></td><!-- 2016.1.19通过可编译的div来代替输入框 -->
<td style="text-align:center;">{{tb.score}}</td>
<td style="text-align:center;"><div class="text" contenteditable="true" ng-model="tb.por"></div></td>
<td>
<select name="" id="" ng-change="changetype(adds)" ng-model="adds" style="text-align:center;width:100%;min-width:80px;margin-bottom:0">
<option value="" ng-show="isShow">{{tb.type}}</option>
<option value="支持红方">支持红方</option>
<option value="支持蓝方">支持蓝方</option>
<option value="双方相同">双方相同</option>
</select>
</td>
</tr>
</tbody>
</table>
</div>
<div class="pagination">
<ul style="float:right">
<li id="previous"><a href="">上一页</a></li>
<li><!--用于页标的显示 -->
<ul id="page_num_all">
</ul>
</li>
<li id="next"><a href="" style="border:1px solid #ddd;float:right">下一页</a></li>
</ul>
<span>
当前为第<span class="num" id="current_page"></span>页,总共<span class="num" id="page_all"></span>页
</span>
<span>您当前对select的操作值为:</span>{{typename}}
</div>
<!-- END FORM-->
</div>
</body>
js代码:
<script>
angular.mole("myMole",[]).controller('myCtrl', function($scope) {
$scope.kaohzbTitle = "考核指标维护";
$scope.search = new Object();
$scope.isdisabled=false;
$scope.isInfo=false;
$scope.saveDate="";//用于保存得到的原始数据
// $http.post请求表格数据
// 模仿请求得到的数据
var datalist=[{
id:1,zbname:"中亚赛区比赛",zbtime:"2015-12-03",zbrul1:"胜利",zbrul2:"失败",por:"请输入说明内容",score:"2:1",type:"支持红方"},{
id:2,zbname:"日韩赛区比赛",zbtime:"2015-11-11",zbrul1:"胜利",zbrul2:"胜利",por:"请输入说明内容",score:"2:1",type:"支持蓝方"},{
id:3,zbname:"欧美赛区比赛",zbtime:"2015-3-03",zbrul1:"失败",zbrul2:"胜利",por:"请输入说明内容",score:"2:1",type:"双方相同"},{
id:4,zbname:"中东赛区比赛",zbtime:"2016-1-05",zbrul1:"胜利",zbrul2:"失败",por:"请输入说明内容",score:"2:1",type:"支持蓝方"},{
id:5,zbname:"北京赛区比赛",zbtime:"2014-12-23",zbrul1:"失败",zbrul2:"胜利",por:"请输入说明内容",score:"2:1",type:"双方相同"},{
id:6,zbname:"韩国赛区比赛",zbtime:"2015-11-01",zbrul1:"失败",zbrul2:"胜利",por:"请输入说明内容",score:"2:1",type:"双方相同"},{
id:7,zbname:"日本赛区比赛",zbtime:"2011-1-23",zbrul1:"胜利",zbrul2:"失败",por:"请输入说明内容",score:"2:1",type:"支持红方"},{
id:8,zbname:"中亚赛区比赛",zbtime:"2013-12-15",zbrul1:"失败",zbrul2:"胜利",por:"请输入说明内容",score:"2:1",type:"支持蓝方"},{
id:9,zbname:"中亚赛区比赛",zbtime:"2015-10-17",zbrul1:"失败",zbrul2:"胜利",por:"请输入说明内容",score:"2:1",type:"支持红方"},{
id:10,zbname:"中亚赛区比赛",zbtime:"2015-11-21",zbrul1:"胜利",zbrul2:"胜利",por:"请输入说明内容",score:"2:1",type:"支持蓝方"},{
id:11,zbname:"中亚赛区比赛",zbtime:"2015-2-02",zbrul1:"失败",zbrul2:"失败",por:"请输入说明内容",score:"2:1",type:"支持红方"},{
id:12,zbname:"中亚赛区比赛",zbtime:"2015-2-05",zbrul1:"胜利",zbrul2:"失败",por:"请输入说明内容",score:"2:1",type:"双方相同"}];
$scope.fun=function(){
var e=window.event||arguments[0];
var src=e.srcElement||e.target;
if(src.nodeName=="TD"){
var par=src.parentNode;
var sd=par.getElementsByTagName("td")[0];
if(sd.firstChild.checked==true){
sd.firstChild.checked=false;
}else{
$("tr td").attr("checked",false);
sd.firstChild.checked=true;
}
}
}
$scope.refresh=function(){//点击刷新按钮显示表格
$scope.saveDate=datalist;
// console.log("结束赋予数据");
$scope.$watch("saveDate",function(){//2016.1.20监听列表生成数据,当发生变化时执行刷新列表
table_page();
$scope.isshow=true;
});
}
$scope.save=function(){//页面提交按钮
console.log("准备保存");
console.log($scope.saveDate);//只要数据改变,自动保存到原始数据列表中
}
//表格分页功能
function table_page(){
var show_page=5;//每页显示的条数
var page_all=$("#page").children().size();//总条数
var current_page=1;//当前页
// console.log(page_all);
var page_num=Math.ceil(page_all/show_page);//总页数
var current_num=0;//用于生成页标的计数器
var li="";//页标元素
while(page_num>current_num){//循环生成页标元素
li+='<li class="page_num"><a href="javasctip:(0)">'+(current_num+1)+'</a></li>';
current_num++;
}
$("#page_num_all").html(li);//添加页标到页面
$('#page tr').css('display', 'none');//设置隐藏
$('#page tr').slice(0, show_page).css('display', '');//设置显示
$("#current_page").html(""+current_page+"");//显示当前页
$("#page_all").html(""+page_num+"");//显示总页数
$("#previous").click(function(){//上一页
var new_page=parseInt($("#current_page").text())-1;
if(new_page>0){
$("#current_page").html(""+new_page+"");
tab_page(new_page);
}
});
$("#next").click(function(){//下一页
var new_page=parseInt($("#current_page").text())+1;//当前页标
if(new_page<=page_num){//判断是否为最后或第一页
$("#current_page").html(""+new_page+"");
tab_page(new_page);
}
});
$(".page_num").click(function(){//页标跳转
var new_page=parseInt($(this).text());
tab_page(new_page);
});
function tab_page(index){//切换对应页标的页面
var start=(index-1)*show_page;//开始截取的页标
var end=start+show_page;//截取个数
$('#page').children().css('display', 'none').slice(start, end).css('display', '');
current_page=index;
$("#current_page").html(""+current_page+"");
}
}
}).directive('contenteditable', function() {//自定义ngModel的属性可以用在div等其他元素中
return {
restrict: 'A', // 作为属性使用
require: '?ngModel', // 此指令所代替的函数
link: function(scope, element, attrs, ngModel) {
if (!ngModel) {
return;
} // do nothing if no ng-model
// Specify how UI should be updated
ngModel.$render = function() {
element.html(ngModel.$viewValue || '');
};
// Listen for change events to enable binding
element.on('blur keyup change', function() {
scope.$apply(readViewText);
});
// No need to initialize, AngularJS will initialize the text based on ng-model attribute
// Write data to the model
function readViewText() {
var html = element.html();
// When we clear the content editable the browser leaves a <br> behind
// If strip-br attribute is provided then we strip this out
if (attrs.stripBr && html === '<br>') {
html = '';
}
ngModel.$setViewValue(html);
}
}
};
})
</script>
⑷ 如何用angularjs制作一个完整的表格
先给大家简单介绍angular/libs/bootstrap/3/libs/angular.js/1.5.0-beta.0/angular.js"></script> <script> var app = angular.mole("myApp", []); app.controller("myCtrl", function ($scope, $http) { $http.get("Service.js").then(function (response) { //数据源 $scope.data = response.data.records; //分页总数 $scope.pageSize = 5; $scope.pages = Math.ceil($scope.data.length / $scope.pageSize); //分页数 $scope.newPages = $scope.pages > 5 ? 5 : $scope.pages; $scope.pageList = []; $scope.selPage = 1; //设置表格数据源(分页) $scope.setData = function () { $scope.items = $scope.data.slice(($scope.pageSize * ($scope.selPage - 1)), ($scope.selPage * $scope.pageSize));//通过当前页数筛选出表格当前显示数据 } $scope.items = $scope.data.slice(0, $scope.pageSize); //分页要repeat的数组 for (var i = 0; i < $scope.newPages; i++) { $scope.pageList.push(i + 1); } //打印当前选中页索引 $scope.selectPage = function (page) { //不能小于1大于最大 if (page < 1 page > $scope.pages) return; //最多显示分页数5 if (page > 2) { //因为只显示5个页数,大于2页开始分页转换 var newpageList = []; for (var i = (page - 3) ; i < ((page + 2) > $scope.pages ? $scope.pages : (page + 2)) ; i++) { newpageList.push(i + 1); } $scope.pageList = newpageList; } $scope.selPage = page; $scope.setData(); $scope.isActivePage(page); console.log("选择的页:" + page); }; //设置当前选中页样式 $scope.isActivePage = function (page) { return $scope.selPage == page; }; //上一页 $scope.Previous = function () { $scope.selectPage($scope.selPage - 1); } //下一页 $scope.Next = function () { $scope.selectPage($scope.selPage + 1); }; }); }) </script> </body> </html> 关于Angular.js与Bootstrap相结合实现表格分页代码小编就给大家介绍这么多,希望对大家有所帮助!
⑸ 如何使用Angularjs制作幻灯片
使用方法:利用npm方式安装
//首先安装angularjsslider NPM
以上是制作幻灯片的方法。
⑹ angularjs 怎么添加ng-class
angularjs中ng-class和class到底有来什么自区别,怎么用ng-class呢 ng-class是根据 key: value来设置class你看angularjs进阶的课程.看对你有帮助不. function ctr($scope){ $scope.test
⑺ 如何利用ionic框架制作下拉框并利用AngularJS值
第一步,抄打开HBuilder开发工袭具,并在创建好的web项目目录下创建静态页面select.html,如下图所示:
第二步,引入ionic框架有关的CSS文件和JavaScript文件,如下图所示:
第三步,在body标签元素内插入div,并设置样式item、item-input、item-select,如下图所示:
第四步,在第一个div标签元素设置ng-app、ng-controller指令,如下图所示:
第五步,利用AngularJS编辑代码,并给下拉框赋值,months有id和name,如下图示:
第六步,下拉框插入option
<select>
<option ng-repeat="mo in months" value="{{mo.id}}">{{mo.month}}</option>
</select>
⑻ AngularJS制作的网页怎么提高访问速度
1.把需要用到的JS文件依赖全部压缩。 2.按需加载,就是需要依赖哪些JS文件就加载哪些JS文件。 3.使用内CDN。 数据做缓容存,压缩合并代码 angular相对于react来说,首次加载真的是慢,没办法,react可以根据生命周期来决定何时加载。
⑼ AngularJS制作的网页怎么提高访问速度
1.把需要用到的JS文件依赖全部压缩。
2.按需加载,就是需要依赖哪些回JS文件答就加载哪些JS文件。
3.使用CDN。
数据做缓存,压缩合并代码
angular相对于react来说,首次加载真的是慢,没办法,react可以根据生命周期来决定何时加载。
⑽ 如何用angularjs实现搜索框功能,求demo
这个Angular 2的 Alpha, Beta,和rc版本众多,Udemy的教程是按照 Beta 来制作的,和rc版本产别很大。以前我看Rex的代码觉版得很难理解,权但终归还能用起来,就是applyMiddleware一开始不太好理解。但是,Rex跟Angular2比起来简直就是良心制作。
总之,建议先学习Angular2两年时间,再考虑能用它来做实际项目。
Angular2能运行的例子比熊猫还少。更不要奢望Gulp,Webpack配合例子了。