Visual Studio 2013 中的 LightSwitch 有新增功能,包括更好的团队开发支持以及在构建 HTML 客户端桌面和 Office 365 应用程序方面的改进。本文结合最新发布的Wijmo 5提供的AngularJs进行图解。

基于Visual Studio LightSwitch作为数据源,我们使用Wijmo 5控件快速的创建 AngularJS应用程序。

插入数据记录

业务规则校验

数据记录更新

选择数据记录,点击键盘上删除按键

点击列头,进行数据排序

并发性校验(由LightSwitch的后端提供)。

Wijmo 5控件集

2014年10月7日---葡萄城宣布正式发布Wijmo 5。Wijmo 5不再兼容传统浏览器(<= IE9),纯HTML5控件集。并且,发布并Wijmo 5全部的控件中将全面支持Angular JS。

为何使用Wijmo 5和LightSwitch?

  • 为了100%控制UI:LightSwitch HTML Client基于JQuery Mobile,这导致为了控制UI不得不花费大量时间。
  • 为了实现安全性:安全策略一般在Server端实现。无法通过AngularJs前端技术实现。LightSwitch使得安全性非常容易实现。
  • 为了处理并发性:当多人同时更新DB会导致并发性,所幸,LightSwitch已经自动实现该特性。
  • 为了用LightSwitch进行管理界面代码:基于LightSwitch,我们无需用AngularJs实现管理界面代码,LightSwitch已经实现了,故结合LightSwitch和AngularJs使得编程非常容易。
  • 为了加快开发:当前使用LightSwitch,可以大大减少代码编写,这意味着开发进程会加速,bug会减少。

例子如下所示:

LightSwitch 业务层

在解决方案视图,在数据源DataSources右键,选择Add Table

创建ToDo表

点击写代码按钮,选择Validate方法,在生成的模板中,插入验证代码。

partial void ToDoes_Validate(ToDo entity, EntitySetValidationResultsBuilder results){// Do not allow a task to be called {New Task]if (entity.TaskName == "[New Task]"){results.AddEntityError("Task cannot be named [New Task]");}// Do not allow more than 1 incomplete Taskif (entity.IsComplete == false){int intCountOfIncomplete =this.DataWorkspace.ApplicationData.ToDoes.Where(x => x.IsComplete == false).Where(x => x.Id != entity.Id).Count();if (intCountOfIncomplete > 0){results.AddEntityError("Cannot have more than 1 incomplete Task");}}}

Wijmo 5代码

Wijmo 5下载地址:输入邮箱即可获得下载URL地址

解压Wijmo样例,定位到“..\Samples\JS\Angular\OData”目录,拷贝Vendor和styles文件夹到LightSwitch Server工程的Scripts文件夹。

创建wijmo.data文件夹,下载ODataCollectionView.js,并拷贝在wijmo.data文件夹下。

AngularJs代码

在scripts文件夹下创建app.js脚本文件,并输入如下代码。

// 在AngularJS 声明依赖 Wijmo "wj" module:
var app = angular.module('app', ['wj']);

在scripts文件夹下创建controllers文件夹,并创建appCtrl.js,并输入如下代码。

'use strict';var app = angular.module('app');app.controller('appToDoCtrl', function appToDoCtrl($scope) {// define data service URL and data types for specific columnsvar oDataService = '/ApplicationData.svc', dataTypes = [];// load ToDos table$scope.cvToDo = new wijmo.data.ODataCollectionView({ serviceUrl: oDataService, entityName: 'ToDoes' },['Id'],{serverSettings: {selects: ['Id', 'RowVersion', 'TaskName','IsComplete', 'Created', 'Modified']}},dataTypes, loaded, true);// Display any errors$scope.cvToDo.error.addHandler(function (sender, args) {alert(sender.errorMsg);});// tell scope when tables finish loadingfunction loaded() {$scope.$apply();}
});

创建HTML页面

创建ToDo.htm页面,并输入如下代码:

<!DOCTYPE html>
<html lang="en" ng-app="app" ng-controller="appToDoCtrl">
<head><meta charset="utf-8" /><title>To DO</title><!-- ensure IE uses the latest version of IE (yes, yes...) --><meta http-equiv="X-UA-Compatible" content="IE=Edge" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><!-- jQuery/Angular/Bootstrap --><script src="http://code.jquery.com/jquery-2.0.0.min.js" type="text/javascript"></script><script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.19/angular.min.js" type="text/javascript"></script><script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.19/angular-route.min.js" type="text/javascript"></script><script src="https://netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js" type="text/javascript"></script><link rel="stylesheet" href="https://netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css" type="text/css" /><!-- Wijmo --><script src="scripts/vendor/wijmo.min.js" type="text/javascript"></script><script src="scripts/vendor/wijmo.input.min.js" type="text/javascript"></script><script src="scripts/vendor/wijmo.grid.min.js" type="text/javascript"></script><link href="styles/vendor/wijmo.min.css" rel="stylesheet" /><!-- app scripts --><script src="scripts/wijmo.data/ODataCollectionView.js" type="text/javascript"></script><script src="scripts/app.js" type="text/javascript"></script><script src="scripts/controllers/appCtrl.js" type="text/javascript"></script><!-- Wijmo-Angular interop --><script src="scripts/vendor/wijmo.angular.min.js" type="text/javascript"></script><!-- app styles --><link href="styles/app.css" rel="stylesheet" type="text/css" />
</head><body><div class="header"><div class="container" style="position:relative"><h1>TO DO Example</h1></div></div>
</body>
</html>

在<body>内添加Wijmo Grid代码:

<div class="container"><wj-flex-grid class="grid" allow-add-new="true" allow-delete="true" items-source="cvToDo"><wj-flex-grid-column binding="TaskName" width="300" header="Task Name"></wj-flex-grid-column><wj-flex-grid-column binding="IsComplete" datatype="Boolean" width="200" header="IsComplete"></wj-flex-grid-column></wj-flex-grid></div>

参考文章:

  • Microsoft Visual Studio LightSwitch 介绍
  • LightSwitch开发者中心
  • LightSwitch 团队博客
  • Wijmo5 中文博客

转载于:https://www.cnblogs.com/powertoolsteam/p/Using-AngularJS-Wijmo-Grid-With-LightSwitch-OData.html

图解AngularJS Wijmo5和LightSwitch相关推荐

  1. Angularjs切换网站配色模式简单示例2(切换body元素的class)

    一个网站可以有多种配色方案,例如正常模式,夜间模式等. 简单示例一个通过点击toggle 按钮,切换body元素的class,达到切换配色模式的angularjs小app. 1. Live范例可以在以 ...

  2. 全新Wijmo5中文学习指南正式上线

    2019独角兽企业重金招聘Python工程师标准>>> Wijmo 是一款使用 TypeScript 编写的新一代 JavaScript/HTML5 控件集.它秉承触控优先的设计理念 ...

  3. CentOS 8 安装图解

    继 RHEL 8 发布之后,CentOS 社区也发布了让人期待已久的 CentOS 8,并发布了两种模式: CentOS stream:滚动发布的 Linux 发行版,适用于需要频繁更新的开发者 Ce ...

  4. AngularJS和DataModel

    通常,在AngularJS中使用JSON作为存储数据的模型.我们可能这样在controller中写model: app.controller('BookController',['$scope',fu ...

  5. AngularJS 杂项知识点

    1.要用ngChange要同时使用ngModel,下拉选择获取当前选中值. 2.打包代替动态加载(js文件) requirejs真正的价值在于模块化,不是动态加载,angularjs本身有模块化机制, ...

  6. angularjs post 跨域

    web api搞好了:用Ajax妥妥的:但是前端用的AngulagJS,也懒得再换为Ajax了: 但是问题来了:提示: 已拦截跨源请求:同源策略禁止读取位于 http://x.x.x.x:port/a ...

  7. AngularJS 指令

    1. AngularJS指令的特点: AngularJS通过被称为指令的新属性来扩展HTML,指令的前缀为ng-. AngularJS通过内置的指令来为应用添加功能. AngularJS允许你自定义指 ...

  8. AngularJS中的按需加载ocLazyLoad

    欢迎大家讨论与指导 : ) 初学者,有不足的地方希望各位指出 一.前言 ocLoayLoad是AngularJS的模块按需加载器.一般在小型项目里,首次加载页面就下载好所有的资源没有什么大问题.但是当 ...

  9. 【12】AngularJS 事件

    AngularJS 事件 AngularJS 有自己的 HTML 事件指令. ng-click 指令 ng-click 指令定义了 AngularJS 点击事件. <div ng-app=&qu ...

最新文章

  1. Redis 之(二) Redis的基本数据结构以及一些常用的操作
  2. logback 的 filter
  3. 带学生参加电赛,5个国一,2个国二!15个省奖!
  4. ios12关闭设置角标_iOS 12.4.2为停产的设备带来了安全修复程序
  5. MapReduce-从HBase读取数据处理后再写入HBase
  6. Python入门之类与面向对象(一)
  7. Django,Celery, rabbitmq
  8. 和吴昊一起玩推理 Round 10 (第一季完结篇) —— 终极推理 —— L与夜神月的对话...
  9. mysql 全连接_mysql 实现全连接
  10. 【POJ 3074】Sudoku【剪枝】
  11. 3dmax导出fbx事项注意
  12. named-config with name ‘c3p0-config.xml‘ does not exist. Using default-config
  13. python把utf8编码转为gbk_Python:UTF-8编码转换成GBK编码
  14. OWC资料收集-绑定到数据源 Office XP 图表组件
  15. 实训项目名称: 双绞线的制作
  16. Java处理图片报错:two SOF markers
  17. 【老九】【Python】文件操作与异常处理
  18. httpclient中警告Encrypted Alert后断开连接问题处理
  19. fiddler抓包指南(浏览器、app抓包及证书安装)
  20. 数据结构:字符串 C++

热门文章

  1. idea annotate启用
  2. Android网络编程(一)HTTP协议原理
  3. 2021高考 无锡高中成绩查询,无锡2021高考成绩排名榜单,无锡各高中高考成绩喜报...
  4. 2012服务器IP地址怎么修改,2012服务器IP地址怎么修改
  5. 关于js中事件的event.stopPropagation()方法的理解与举例说明
  6. 卜若的代码笔记-一周速通LayaAir-第二章:获取组件
  7. SQLServer 导入导出工具BCP详解
  8. 如何正确调用百度AI开放平台的API进行图像识别
  9. python猜数字小游戏(内附完整源码)
  10. 计算机毕业设计Python+uniapp微信签到小程序(小程序+源码+LW)