Node.js 切近实战(五) 之图书管理系统(图书Gallery)

上一节我们讲述了图书管理系统的查询,今天我们来看一下图书管理系统的Gallery,一个很简单的Gallery。在看Gallery之前我们先看一下RoboMongo,一个连接MongoDb的客户端工具,以图形化的界面操作MongoDB。先看一下

wKioL1dqWi-iRS36AAC4s4McFP4573.png

看数据非常方便,还支持table显示,文本格式显示等

wKiom1dqWn2wcoCFAACyEx2kfEQ509.png

非常过瘾,还可以用菜单进行编辑,删除操作。

wKioL1dqWsbDnF9NAACLAaUPb9Y833.png关于这个工具,谁用谁知道。

 

OK,今天主要任务还是要讲我们的图书Gallery,先看一下UI代码

1

2

3

4

5

6

7

8

9

#book_list(ng-controller='bookListCtrl')

 #book_gallary

  a(ng-repeat='model in BookList track by $id(model)' ng-href='#' on-finish-render="ngRepeatFinished")

   img(ng-src='/book/image/{{model.Image}}')

 

 

 block scripts

  script(type='text/javascript' src='/javascripts/thirdpart/justifiedGallery/jquery.justifiedGallery.min.js')

  script(type='text/javascript' src='/javascripts/local/book/booklist.js')

注意这里的on-finish-render,其实这是一个angular指令,用来判断ng-repeat是否已经完成,在这里为什么要指定track by,是因为如果你不指定的,一旦有重复的数据,angular就会报错。我们指定的话,每行就会生成自己的自增id行号。因为angular需要一个唯一值可以与生成的dom绑定,以便检索追踪。ok,这里图书Gallery使用的jQuery.justifiedGallery。我们看一下js的代码。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

var appModule = angular.module('bookListModule', ["kendo.directives"]);

 

appModule.controller('bookListCtrl'function ($scope, $http) {

    $scope.pageIndex = 0;

    $http.get('/book?pageIndex=' + $scope.pageIndex + '&pageSize=50')

    .success(function (result) {

        $scope.BookList = result.books;

    });

     

    $scope.$on('ngRepeatFinished'function (ngRepeatFinishedEvent) {

        angular.element("#book_gallary").justifiedGallery();

    });

}).directive('onFinishRender'function ($timeout) {

    return {

        restrict: 'A',

        link: function (scope, element, attr) {

            if (scope.$last === true) {

                $timeout(function () {

                    scope.$emit('ngRepeatFinished');

                });

            }

        }

    }

});

 

angular.element('#book_list').data('$injector''');

angular.bootstrap(angular.element('#book_list'), ['bookListModule']);

首先请求api,查询图书,将请求到的图书信息BookList绑定到UI。注意下面的指令onFinishRender是如何判断ng-repeat已经结束的,在当前scope中,有个$last属性,如果$last为true,则认为该行数据已经渲染结束,并发射事件ngRepeatFinished,发射以后,会被接收到,即$scope.$on('ngRepeatFinished')。注意这里的$setTimeout,每一行数据渲染都会走link,每一行渲染结束$scope.$last都为true,所以我们只能在每一行绑定渲染结束之后,去发射事件。

在这个事件中,我们再对图片所在Div创建Gallery。如果页面DOM都没结束,你就创建Gallery,肯定是不行的,所以上面的代码就是解决这个问题的。

最后看一下运行效果

wKioL1dqX2yxhyS-AAL25DgkWPA128.png

 

原文转自: 乐搏学院http://www.learnbo.com/front/article/cmsIndex
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Verilogatan是一个基于Verilog硬件描述语言实现的反正切函数。Verilogatan用于计算反正切函数的值,其输入为一对正弦和余弦值,输出为对应的反正切值。 Verilogatan的实现过程包括以下几个步骤: 1. 输入信号:Verilogatan接受来自正弦和余弦功能模块的输入信号。这些信号代表输入的正弦和余弦值。 2. 查找表:Verilogatan使用查找表的方式来实现反正切函数。查找表中存储了一些预计算的反正切值,根据输入信号的值查找对应的反正切值。 3. 插值:由于查找表中存储的反正切值有限,因此Verilogatan使用插值技术,根据输入信号的值与查找表中的最近两个值进行线性插值,来计算出精确的反正切值。 4. 输出信号:Verilogatan将计算得到的反正切值输出给其他功能模块进行进一步的处理和使用。 Verilogatan的实现可以根据具体的需求进行优化和改进。例如,可以增加更多的预计算值来提高查找表的精度,或者使用更高级的插值算法来提高计算的准确性和效率。 总的来说,Verilogatan是通过基于Verilog的硬件描述语言实现的反正切函数,它能够根据输入的正弦和余弦值计算出相应的反正切值。这个函数在数字信号处理和其他需要浮点数运算的硬件设计中起到了重要的作用。 ### 回答2: verilog atan是一种用于计算反正切函数的Verilog语言的函数或模块。 反正切函数(atan)是一个数学函数,返回给定参数的反正切值,在某些计算机语言和硬件描述语言中,可以使用该函数来进行角度和弧度之间的转换以及旋转计算等。 在Verilog中,实现atan函数可以通过使用级数展开法或者使用查找表的方法来实现。通过级数展开法,我们可以使用泰勒级数或Maclaurin级数对反正切函数进行逼近。而另一种更为高效的方法则是使用查找表来实现。 大致的实现步骤如下: 1. 确定输入和输出的数据位宽,以及所需的精度。 2. 根据所选的实现方法,编写相应的Verilog代码。 3. (泰勒级数法)使用循环结构,在每一次迭代中,计算当前项的系数并将其累加到结果中,并更新迭代次数。 (Maclaurin级数法)类似于泰勒级数法,差异在于,这里是从较低次数开始累加。 (查找表法)根据输入的角度或弧度,通过查找具有预定义值的表格来返回相应的反正切值。 4. 在Verilog模块中实例化该函数,并根据需求连接输入和输出端口。 5. 运行模拟仿真或进行硬件逻辑综合,以验证和优化Verilog atan函数的性能和功能。 需要注意的是,使用Verilog实现atan函数可能需要更复杂的数学运算和编程技巧。因此,对于初学者来说,可能需要参考更多的资料和示例代码,理解高级数学和Verilog编程的知识以及相关的数据结构和算法。 ### 回答3: Verilog是硬件描述语言(HDL),主要应用于数字电路的设计。atan(反正切)是一种数学函数,用于计算给定比值的角度。我们可以使用Verilog来实现反正切函数。 实现atan函数的一种常见方法是使用泰勒级数展开。泰勒级数能够近似表示一个函数,并且可以根据所需的精度进行展开。我们可以使用Taylor展开来实现atan函数。 在Verilog中,我们可以使用循环和条件语句来实现Taylor展开。首先,我们需要将输入比值缩小到特定的范围内,通常选择[-1, 1]之间。然后,使用Taylor展开计算反正切的近似值,并对每一项进行求和。最后,根据需要的精度返回计算结果。 以下是一个简化的Verilog代码示例,用于实现反正切函数的近似计算: ```verilog module atan_approximation( input [7:0] ratio, output [7:0] atan_value ); reg [7:0] sum; reg [7:0] term; reg [7:0] ratio_squared; reg [7:0] x; always @ (ratio) begin ratio_squared = ratio * ratio; x = ratio / (1 + sqrt(1 + ratio_squared)); sum = 0; term = x; for (int i = 1; i <= 5; i = i + 1) begin term = term * (-1) * ratio_squared; term = term / ((2 * i + 1) * (2 * i + 1)); sum = sum + term; end atan_value = sum; end endmodule ``` 这个简化的Verilog代码示例将给定的比值作为输入,并使用Taylor展开来计算它的反正切近似值。代码使用循环变量i来控制展开的项数,并通过乘法和除法运算来计算每一项的值。最终结果以8位宽度的数表示输出。 需要注意的是,这只是一个简单的近似计算,并不是标准的反正切功能。在实际应用中,如果需要更高精度的结果,可能需要调整计算的范围和Taylor展开的项数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值