问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何用Angular写界面

发布网友 发布时间:2022-04-28 17:06

我来回答

1个回答

热心网友 时间:2022-04-20 05:56

在 HTML 就像引入普通的 JS 一样引入 AngularJs 。同时,定义好应用的名称,以及视图的位置(这里可能得有 AngularJs 的基础)。
<!doctype html>
<-- //定义好 ng-app 作为应用的名称 -->
<html ng-app="RemoteCamera">
<head>
<meta charset="utf-8">
<title>Remote Camera</title>
<script type="text/javascript">
// 用于登录状态的标识
connected = {{alreadyLogged}};
</script>
<-- //AngularJs 的引入 -->
<script src="script/angular.min.js"></script>
<script src="script/angular-resource.min.js"></script>
<script src="script/camera.js"></script>
</head>
<-- //定义好 ng-view -->
<body ng-view>
<-- //这里是 viewer 代码 -->
</body>
</html>

每一个 Viwer 都会在 Camera.js 中对应一个 Controller 来渲染,所以有两部分,第一部分是 HTML 中的模板:
<-- //login view -->
<script type="text/ng-template" id="loginView">
<div class="container" ng-controller="loginCtrl" >
//这里是具体的HTML代码
</div>
</script>

<-- //camera view -->
<script type="text/ng-template" id="cameraView">
<div class="container" ng-controller="cameraCtrl" >
//这里是具体的HTML代码
</div>
</script>

<-- //photos view -->
<script type="text/ng-template" id="photosView">
<div class="container" ng-controller="photosCtrl" >
//这里是具体的HTML代码
</div>
</script>

另外一部分,则是使用了 AngularJs 中的 $routeProvider 来进行路由跳转,这样就能控制访问的 URL 与对应的 View 正确显示:
/**
* @路由把 HTML 中的 View 和 AngularJs 中的 Controller 对应起来
* @当访问「/」的时候,就会显示「登录(login)」
* @登录成功则跳转到「菜单(menu)」
* @访问非定义的内容,也会跳到「/」
*/
var remoteCamera = angular.mole('RemoteCamera',['ngResource'])
.config(function($routeProvider) {
$routeProvider.when("/", {
controller: remoteCamera.loginCtrl,
template: document.getElementById('loginView').text
}).when("/menu", {
controller: remoteCamera.menuCtrl,
template: document.getElementById('menuView').text
}).when("/camera", {
controller: remoteCamera.cameraCtrl,
template: document.getElementById('cameraView').text
}).when("/photos", {
controller: remoteCamera.watchPhotosCtrl,
template: document.getElementById('photosView').text
}).otherwise({
redirectTo: "/"
})
});

四、AngularJs 中的 Controller 应用
在 View 中我们能看到对 Controller 这样的 ng-controller=loginCtrl 的定义,它将与 JS 中对应的 Controller 进行*,数据间是双向绑定,同时作用于整个 DOM 结构。
而我们在 Controller 中,可以传递参数、可以和服务端进行交互、可以进行前端交互。那么,一个普通的 Controller 如下:
/**
* @定义登录的controller
*/
remoteCamera.controller('loginCtrl', function($scope, $resource, $location) {
//路由跳转,如果已经登录了,就调到「menu」
if(connected) {
return $location.path("/menu");
}
//定义的函数
$scope.doLogin = function() {
//与服务端的交互
$resource('/api/login').save({
//数据传递到服务器
}, function(data) {
//成功返回
console.log(data)
}, function() {
//错误返回
//与view的交互
$scope.errorMsg = 'Error';
});
};
})

总觉得还缺少点什么来的,还是直接看源代码吧, Camera.js 。
五、完善你的 WebApp
在 Remote Camera 中使用 AngularJs 来完成一个 WebApp,其实没多少代码和工作量。但要使它变成一个 WebApp,还需要完善一些细节。这里主要以 iOS 为例子。
接下来是为你的 WebApp 添加全屏、图标和初始界面:
<-- //加入响应式布局 -->
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" />

<-- //设置safari的属性 -->
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<meta name="apple-mobile-web-app-title" content="Remote Camera" />

<-- //设置桌面图标 -->
<link rel="apple-touch-icon-precomposed" href="/images/54.jpg">
<link rel="apple-touch-icon-precomposed" sizes="72x72" href="/images/72.jpg">
<link rel="apple-touch-icon-precomposed" sizes="114x114" href="/images/114.jpg">
<link rel="apple-touch-icon-precomposed" sizes="144x144" href="/images/144.jpg">

<-- //设置初始界面 -->
<link rel="apple-touch-startup-image" href="/images/start.jpg" />
<link rel="apple-touch-startup-image" href="/images/start.jpg" media="screen and (device-width: 320px) and (device-height: 568px) and (-webkit-device-pixel-ratio: 2)" />

六、遇到的问题
由于 HTML 页面是由 NodeJs 的 Swig 模板渲染出来,而 Swig 的参数语法又和 AngularJs 的语法一样,所以导致参数不能正常替换掉。于是,需要通过修改 AngularJs 的字符匹配来解决:
var myApp = angular.mole('myApp', [], function ($interpolateProvider) {
$interpolateProvider.startSymbol('[[');
$interpolateProvider.endSymbol(']]');
});
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
...抛物线y=x2-4x+3与x轴交于A、B两点,与y轴交于点C,连AC,将直线AC向右... 抢劫罪的构成要素有哪些 抢劫罪的几个要素 抢劫罪违反了什么法律 转化型抢劫的法律认定 我想问问我的魔兽世界帐号值多少钱? 我的号能卖多少?(魔兽世界) 求评估魔兽世界账号价值,懂得来! 魔兽世界账号问题,我有一个90级的DK,想便宜出售了,直接卖了,想问问大... 魔兽世界号价值评估 网页设计中&lt;head&gt;? &lt;/head&gt; 用dreamweaver 制作网页出现乱码怎么回事 网站Meta标签都有哪些属性及作用 微信自助解封验证码错误怎么回事 微信被冻结了,然后他把电话号码给换了,我每次申请解冻就说短信验证码错误,怎么办啊 被手机自助冻结,然后解冻一直提醒我短信验证码错误 微信解冻验证码错误 被手机自助冻结,然后解冻一直提醒我短信验证码错误? 老师您好,我的好老师演讲稿600字左右 为什么解冻微信验证码会错误啊? 解冻短信验证码错误怎么办 微信账号解冻提示短信验证码错误,请返回重新尝试怎么回事 正宗慕斯蛋糕做法及配方 被冻结的解冻时短信验证码已经发了,为什么还是显示验证码错误? 微信被冻结了根据提示解冻却显示验证码错误,又不会好有帮忙解冻怎么办? 微信解冻提示验证码错误 微信解冻时短信验证码错误怎么办? 被手机自助冻结,然后解冻一直提醒我短信验证码错误 微信*登录,提示可以自助解封,但是到最后输入验证码之后一直提示验证码操作失败,登不上去,怎样解决 微信被自动冻结了根据提示解冻却显示验证码错误,要怎么解冻呀? 手机上全屏显示图片 点击图片后复制一段隐藏文本的代码要怎么写 移动端web开发meta怎么用 amaze ui 支持jsp吗 如何禁用iscroll5的刷新 TypeError: Cannot read property &#39;style&#39; of null怎么解决 域名出售页面 文字怎么写更吸引人? 用html5做一个遥控汽车应用程序 js、jquery 如何隐藏浏览器地址栏(网页优化,手机可以,ipad mini不可以... 用&lt;bgsound src=&quot;...&quot; &#47;&gt;在文件中加背景音乐,电脑上是有声,微信打开或者用手机浏览器打开就没有声了。 首页banner宽度全屏显示的问题,div+css HTML Meta标签知多少 考企业人力资源管理师三级要多少钱 学人力资源管理师 学费便宜证多少 报考助理人力资源管理师的培训费用是多少 企业人力资源管理师的*与二级报考条件和时间与报考费用??无比感谢 我重新装了操作系统windows xp sp2 无法安装显卡驱动程序怎么办? 如何在XP-SP2下安装版本较低的显卡驱动? 系统升级成SP2以后,显卡驱动怎么也装不上 WINXP SP2自带的显卡驱动问题 重新装了SP2后,没有装显卡,分辨率有32位,可是装了显卡后只有4位,怎么回事?求救啊,我的显卡是NVIDIA GeForc