来一起做个题,节点添加和发帖

作者:澳门金莎娱乐网站

我们如果使用其他的web框架,就需要实现一系列的REST服务通过客户端去连接服务端,并且需要创建数据库以及连接数据库的函数等。但是,使用Meteor就不需要这么麻烦。Meteor使得编写分布式客户端代码就像和本地数据库交互一样简单。每一个Meteor客户端都有一个保存在内存中的数据库缓存,服务端会把数据库中的数据推送到客户端数据库的缓存中,当客户端数据库缓存发生变化时,服务端会自动修改数据库中的内容。Meteor是通过Mongo.Collection Class来处理MongoDB数据的。

有 1到14 这14个数字,要求排列组合成 一个列表S,

在连了网的Linux系统上面安装Meteor是很简单的,只需要运行一条命令,大家可以去Meteor官网看看。

首先创建节点的数据模型,在model文件夹下新建node.js,输入如下代码:

列表S中 包含14个 元素A,

这里我们的虚拟机是没有联网的,所以稍微麻烦一点。

// 定义 MongoDB collection Nodes = new Mongo.Collection;// 创建 collection 帮助函数// 以便获取与节点相关的其他信息// 需要添加“dburles:collection-helpers”包到 meteor// -> $ meteor add dburles:collection-helpersNodes.helpers({ postsObj: function() { return Posts.find({ node: this.url }); }, postsCount: function() { return Posts.find({ node: this.url }).length;// 添加 collection 权限Nodes.allow({ // 登录后才能添加新节点 insert: function { return userId; }});

每个元素都是一个包含 7 个 数字对 的列表,

1.首先运行下面的命令下载Meteor安装包:

添加dburles:collection-helpers包:

就像这样

$ wget http://labfile.oss.aliyuncs.com/courses/424/meteor-install.tar.gz
$ meteor add dburles:collection-helpers

S = [A1, A2, A3 ... A14]

2.加压刚刚下载的包:

然后添加路由,在client文件夹下的routes.js文件中,添加路由state:

A1 = [, ... ]

$ tar zxvf meteor-install.tar.gz
// ...// 退出登录.state('logout', { url: '/logout', resolve: ['$meteor', '$state', function($meteor, $state) { return $meteor.logout().then(function() { $state.go; }, function { console.error('Logout error : ', err); }); }]})// 新添加的代码// 添加论坛节点.state('node', { url: '/new/node', templateUrl: 'client/node/views/node.ng.html', controller: 'NodeCtrl'});

要求是 在每个元素A中, 这14个数字 各出现一次, 并且只出现一次

3.进入解压后的目录:

client文件夹下新建node文件夹,在node文件夹下新建controllers文件夹和views文件夹,在controllers下新建node.js文件,输入如下代码:

在整个 S中, 没有 重复的 数字对。

$ cd meteor-install
// 节点添加功能的控制器angular.module('louForum').controller('NodeCtrl', ['$meteor', '$state', '$scope', function($meteor, $state, $scope) { // 绑定 collection 到 Angular $scope.nodes = $meteor.collection; $scope.save = function { // 新节点 push 到 nodes 集合即可 // Meteor 会自动同步客户端数据到 MongoDB // 所以只要在客户端修改$meteor.collection()的内容 // 数据库中的数据就会被修改 $scope.nodes.push; // 跳转到节点列表页 $state.go('nodesList'); }; }]);

请生成这样的列表S

4.安装:

views文件夹中新建node.ng.html文件,输入如下代码:

eg:

$ sh install.sh
<div > <!-- 表单提交时,保存新节点 --> <form ng-submit="save; node='';"> <div > <label>Node Name</label> <input ng-model="node.name" > </div> <div > <label>Node Url</label> <input ng-model="node.url" > </div> <div > <label>Description</label> <textarea ng-model="node.description" rows="6"></textarea> </div> <button type="submit" >Submit</button> </form></div>

图片 1

5.测试是否安装成功:

在模板中,通过ng-submit给表单提交时绑定了Angular控制器中定义的方法,ng-model用于绑定表单数据,直接写ng-model="node.name",Angular会自动把node设置为一个对象。在Angular中,通过node.name可以获取到绑定此属性的input的值。所以,提交表单时,把node对象传给save()方法即可创建当前输入的节点。

注: 和 算作不同数对

$ meteor --version

运行项目:

扩展: 1- N 个数,N为偶数 ,你的算法能适配吗?

OK,安装完成!

$ meteor

请分析你的算法复杂度,如:N = 10000 时的计算速度你还能接受吗?

AngularJS是一个MV* JavaScript框架,由Google维护。Angular使用声明式编程来构建用户界面,指令式编程来实现业务逻辑,达到了客户端和服务端解耦的目标。下面我们先来看看Angular的基础知识。

浏览器访问http://localhost:3000/new/node,添加新的节点,并提交表单。

Angular通过表达式把数据绑定到HTML模板,表达式写在双大括号内,如:{{ expression }},HTML中出现Angular表达式的地方,就会显示对应表达式的数据。来个示例看看:

然后在虚拟机中新打开一个shell终端,进入louForum目录,进入Meteor的MongoDB命令行环境,查看collection,可以看到,多了一个名为nodes的collection,输入如下命令,查看nodes中的数据:

<!DOCTYPE html><html><head> <meta charset="utf-8"> <title>Angular Demo</title></head><body> <div ng-app="demo" ng-init="str='hello angular'"> <p>{{ str }}</p> <p>{{ 5 + 5 }}</p> </div> <script src="http://www.mp3beamer.com/uploads/allimg/190907/011A5I50-1.jpg"></script> <script> var app = angular.module('demo', []); </script></body></html>
> db.nodes.find();

保存以上代码为HTML文件,在浏览器中打开,可以看到浏览器中显示了hellow angular字符串以及数字10。Angular表达式可以做简单的运算,但是不支持条件判断、循环和异常。我们还可以看到div中出现了ng-appng-init这两个奇怪的东西,这就是Angular的指令了。

我们可以看到打印出了刚刚添加的节点数据,说明我们的节点添加成功了。

Angular指令是HTML带有ng-前缀的扩展属性,每个指令都有不同的功能,也可以自己编写自定义指令:

client文件夹下的routes.js中添加路由state:

  • ng-app:初始化一个Angular应用程序
  • ng-init:初始化当前作用域的属性
  • ng-model:绑定表单元素的值到当前作用域的属性
  • ng-repeat:循环HTML元素
  • ng-controller:定义应用程序的控制器
  • ...
.state('nodesList', { url: '/nodes', templateUrl: 'client/node/views/nodes-list.ng.html', controller: 'NodesListCtrl'})

Angular控制器用于控制和处理应用程序的数据。举个栗子:

node文件夹下的controllers文件夹中添加节点列表控制器,新建nodesList.js文件,输入如下代码:

<!DOCTYPE html><html><head> <meta charset="utf-8"> <title>Angular Demo</title></head><body> <div ng-app="testApp" ng-controller="hello"> <input ng-model="username"> <p>Hello, {{ username }}</p> </div><script src="http://www.mp3beamer.com/uploads/allimg/190907/011A5I50-1.jpg"></script><script> // 创建Angular模块 // 第一个参数是模块的名称 // 第二个参数是一个数组,定义此模块需要依赖的模块(无依赖模块则传空数组) var app = angular.module('testApp', []); app.controller('hello', function { $scope.username = 'shiyanlou'; });</script></body></html>
angular.module('louForum').controller('NodesListCtrl', ['$meteor', '$state', '$scope', function($meteor, $state, $scope) { // 获取所有的节点 // 第二个参数表示是否自动同步客户端数据变动到服务端 // 默认为true // 此处这个控制器只作查询,所以传入false $scope.nodes = $meteor.collection(Nodes, false); }]);

angular.module用于创建Angular模块,通常Angular应用程序由模块定义,Angular控制器需要挂载到模块才会运行。

本文由澳门金莎娱乐网站发布,转载请注明来源

关键词: