AngularJS 实践:应用开发 :: ENA13 价格条码-(五)

上节我们完成了基本用户交互工作,这一个我们将要完成用户表单输入,和数据列表等。相关联 AngularJS 的核心知识包括:Scopes 对象(What are Scopes),Data BindingController以及 UI Router State Manager等。
上节回顾 AngularJS 实践:应用开发 :: ENA13 价格条码-(四)

本节代码获取

如果已经 Clone 了代码库,你只需要执行 git checkout codetrip-2

$ git clone https://code.aliyun.com/passpile/pricebarcode.git
$ git checkout codetrip-2

控制器 FrontCtrl

在这个控制器我们要完成这几个任务:
1. 收集用户的输入信息:前缀码,品类编号(分类编号)和名称,,价格。
2. 根据用户的输入信息生成相应的 EAN13 条形码的十进制数字序列。(二进制的转换以及图形生成,我们将借助于 AngularJS 的插件 angluar-barcode完成。这个插件在前面我们已经包含了。"angular-barcode": "^0.0.4")
3. 将用户输入的信息相应的EAN13 条形码的十进制数字序列放入列表中,用户可以添加或移除列表中的条目
4. 提供[预览]操作,让用户预览上述列表中的条目所对应的条形码。

scripts/route.js

...
.controller('FrontCtrl',function($state,$scope,ean13gen){
    $scope.frontHeading = 'ENA13 价格条码生成器说明';
    $scope.priceCodeItems = [];
    $scope.prefix = '26';
    //1. 收集用户的输入信息:前缀码,品类编号(分类编号)和名称,,价格。
    $scope.genCode = function(prefix,kindCode,kindName,price){
        var item = {prefix:prefix,kindCode:kindCode,kindName:kindName,price:price};
        //2. 生成相应的 EAN13 条形码的十进制数字序列
        item.priceCode = ean13gen(item);
        //3. EAN13 条形码的十进制数字序列放入列表中
        $scope.priceCodeItems.push(item);
    };
    $scope.remove=function(idx){
        //3. 用户可以除列表中的条目
        $scope.priceCodeItems=_.remove($scope.priceCodeItems,function(n){
                return n === idx;
            });
    };
    //4. 提供[预览]操作,让用户预览上述列表中的条目所对应的条形码
    $scope.preview=function(){
        // go preview
    };
})
...

借助 Scopes 对象,为视图 front.html 提供数据和操作绑定。例如:ng-model="kindCode", ng-click="genCode(prefix,kindCode,kindName,price)" 等( Directives )。

ean13gen 为生成 EAN13 条形码的十进制数字序列的功能模块。是一个自定义的Factory Recipe 并通过 DI 完成模块服务或功能连接组合。
scripts/route.js

...
.factory('ean13gen',function(){
    function checksum(number){
        var result = 0;
        for(var i=0;i<12;i+=2){result+=parseInt(number[i]);}
        for(var i=1;i<12;i+=2){result+=parseInt(number[i])*3;}
        return (10 - (result % 10)) % 10;
    }
    return function(options){
        var pricetmpl = ['0','0','0','0','0','0'];
        var _strp = options.price+'';
        _strp=_strp.replace('.','');
        var diff = 6-_strp.length;
        for(var i=0;i<_strp.length;i++,diff++){
            pricetmpl[diff]=_strp[i];
        }
        var strCode= options.prefix+options.kindCode+pricetmpl.join('');
        return strCode+checksum(strCode);
    };
})
...

一般来说这些服务模块应单独写入一个服务模块文件,当前暂且编入同一个文件,便于阅读

检视用户表单输入及页面效果

如果没有启动 browser sync 请用下列命令进行启动

$ cd ~/webshop/pricebarcode
$ gulp serve

如果出现问题,请通过 Chrome Developer Tools 进行排查

本节总结

  1. 我们基本完成了这个小应用的主要功能。下一节只要借助angular-barcode插件完成预览,并制作一个简单的打印就可以完工了。
  2. 这里未涉及 AngularJS 的单元测试。有兴趣的同学请自行参考Unit Testing
  3. AngularJS 与 Gulp 是否适用于你的项目,请多斟酌。很多概念和模式对于有经验的开发者来说已经是很熟悉的了。至于使用 AngularJS 进行开发不过是一种新的体验罢了。
  4. 就在编写这个系列博文的时候 AngularJS 2.0 已经进入 beta 版了。有兴趣的同学可以尝尝鲜。:)

待续...

时间: 2024-10-07 14:15:07

AngularJS 实践:应用开发 :: ENA13 价格条码-(五)的相关文章

AngularJS 实践:应用开发 :: ENA13 价格条码-(最后一里)

上节回顾 AngularJS 实践:应用开发 :: ENA13 价格条码-(五) 在这一个节我将完成这个小应用.并且附加一个简单的 Fade In & Fade Out 效果.这个将涉及 angular-animate 模块插件和一些 Sass 本节代码获取 如果已经 Clone 了代码库,你只需要执行 git checkout codetrip-3 $ git clone https://code.aliyun.com/passpile/pricebarcode.git $ git check

AngularJS 实践:应用开发 :: ENA13 价格条码-(二)

上一节咱们做了个基本介绍和预备工作.这一节我们将进入应用实现前的开发工作流工具和环境准备. 上一节参考: AngularJS 实践:应用开发 :: ENA13 价格条码-(一) 创建开发环境和工作目录 此过程也可以使用 yo webapp 来自动生成. $ mkdir -p ~/webshop && cd ~/webshop 安装 gulp 和 bower $ npm install --global bower gulp-cli 准备 npm 的 package.json,可以参考 Us

AngularJS 实践:应用开发 :: ENA13 价格条码-(一)

AngularJS 可能大家都在用了.我从以前的一项目中提取了一个功能模块并重新组织了一下代码成为一个小应用与大家一起学习交流 AngularJS 的应用开发以及一些工具的使用,比如:bower, gulp等. 这个小应用的功能是让用户输入一些必要信息,然后生成一个相应的 价格条码. 这种价格条码常用于商业零售环境中,一些生鲜类商品按计量计重的方式进行销售时销售前台通过扫码识别其品类和价格,辅助其计价结算. 价格条码-借助 EAN13 条码格式,将品类和价格编入条码 ENA13 一种条码编码格式

AngularJS 实践:应用开发 :: ENA13 价格条码-(四)

上节我们做了个 Hello AngularJS,这一节我开始构建用户界面和用户操作控制等. 上节回顾 AngularJS 实践:应用开发 :: ENA13 价格条码-(三) 本节我将使用 Bootstrap HTML, CSS, and JS 框架,相关知识请参考官网文档 Bootsrap Getting Started 本节代码获取 如果已经 Clone 了代码库,你只需要执行 git checkout codetrip-1 $ git clone https://code.aliyun.co

AngularJS 实践:应用开发 :: ENA13 价格条码-(三)

上一节我们完成了开发工作流工具和环境准备,这一节我们将进行渐进式应用编程.熟悉 AngularJS 开发的同学请跳过. 上一节参考: AngularJS 实践:应用开发 :: ENA13 价格条码-(二) 获取本节代码 https://code.aliyun.com/passpile/pricebarcode 添加 web 应用所依赖的 JavaScript, Stylesheet 引用 编辑 index.html 添加 bootstrap 和 font-awesome 的 CSS 库引用 添加

那位熟悉视频监控软件开发。价格面议

问题描述 那位熟悉视频监控软件开发.价格面议 解决方案 解决方案二:先把监控设备的资料发来看看解决方案三:up解决方案四:我就是做这个了,有什么需求?解决方案五:天敏还是海康的?二次开发?招人?兼职?客户?谢谢解决方案六:海康的硬盘录像机不错!解决方案七:哎,明显的僧多粥少啊,哈哈解决方案八:帮顶了

Windows 8开发入门(十五) Windows 8中的4种视图状态和锁屏通知

在Windows 8中的应用程序在默认打开时是全屏的,此时我们如果需要看其他应用程序就只能回到Metro 起 始页面重新选择其他程序吗?这样就会很麻烦,所以Windows 8应用程序有4种视图状态 (ApplicationViewState),类似于普通窗口程序的最小化.最大化一样可以看到其他应用程序同时允许多个应 用程序的使用. 视图状态切换方法:用鼠标点击屏幕最上方按住不放往右或者往左拖动.移动中间间 隔栏等等. ApplicationViewState: // 摘要: // 当前应用程序的

Ruby on rails开发从头来(五十七)- ActiveRecord基础(多对多关联关系)

在Rails中多对多关联通过在关联表对应的类中声明has_and_belongs_to_many来实现. 在数据库中,多对多关联使用中间表来实现,表中包括关联表的主键,Active Record假定这个中间表的名字是由关联表的名字根据字母的顺序串联起来得到的.例如,关联表为categories和products,中间表的名字就是categories_products. 开发从头来(五十七)- ActiveRecord基础(多对多关联关系)-rails activerecord"> 注意我们

Ruby on rails开发从头来(五十六)- ActiveRecord基础(一对多关联关系)

一对多关联可以使我们表示一组对象,例如,一个order可以包含有任意多个line item,在数据库中,所有的line item记录都通过外键关联到特定的order. 在Active Record中,通过在父对象中的has_many来定义到子对象的关联,在子对象中使用belongs_to来指定父对象.我们已经在上一篇中了解了belongs_to声明,实际上,在一对多的情况下,和一对一是相同的,所以我们来了解has_many声明. 开发从头来(五十六)- ActiveRecord基础(一对多关联关