虽然今天angular5发布了,但我还是吧这篇angularjs(1)+webpack的文章发出来吧哈哈哈

 

本文为原创,转载请注明出处: cnzt       文章:cnzt-p

http://www.cnblogs.com/zt-blog/p/7779384.html

写在前面:

  因为最近总结自己之前做过的东西,所以顺便总结了这一篇,要发布文章时,刚好看到手机推送消息“angular5发布啦”啊哈哈哈哈哈哈。我不管我还是要把关于angular1的这篇文章放上来因为还涉及到webpack呢啊哈哈哈哈哈哈哈哈……  

Angularjs+webpack实现模拟微信菜单编辑功能

1       环境配置:Angularjs

1.1     安装nodejs (npm): 略

1.2     安装webpack (本地)

npm install --save-dev webpack

npm install --save-dev [email protected]<version>

1.3     创建webpack配置文件

webpack.config.js

1.4     安装angularjs

npm install [email protected]  –save-dev

1.5     运行

webpack

webpack-dev-server  (webpack-dev-server --hot --inline)

http://localhost:8080/

1.6     关于热加载:

本地开发时,设置热加载能够实现本地更改即时反应到页面效果。

设置时注意:

配置publicPath;

bundle.js在server中的路径: http://localhost:8080/{publicPath}/bundle.js

1.7     安装loader

Webpack本身只识别js文件,但是项目中通常除了js文件外,还有css,img,url等各种文件,loader就是为了让webpack也能识别这些文件并将其模块化。

安装:

npm install style-loader css-loader --save-dev

npm install file-loader --save-dev

(所有loader详见package.json)

1.8     实现模块化

Webpack是以模块方式(入口文件+模块依赖)管理项目的,所以我们需要给项目加入模块化功能,我们采用ES6的模块化实现方式,需要先安装babel加载器编译ES6:

npm install --save-dev babel-loader babel-core babel-preset-es2015

2       Angularjs

2.1     模块

ng,ngRoute,ngSanitize,ngAnimate…

定义angular模块:

angular.module(‘app.wxPageModule‘, []);

angular.module(‘app. wxPanelModule‘, []);

2.2     指令 v.s. 组件

Angular内置指令: ngApp, ngController, ngModel, ngView, … , {{}}

自定义指令--组件:

wxPanelModule.directive(‘wxPanel‘, function() {

return {

restrict: ‘E‘,   //AEC

templateUrl: ‘./src/components/wxPanel/wxPanelTemplate.html‘,

link: function($scope, elm, attr, controller) {

//可以操作dom,例如绑定dom事件

},

controller: function($scope, $element, $attrs) {

//组件的控制器

},

scope: {

//隔离作用域,定义组件变量

}

}

})

自定义指令依赖angularjs的HTML编译器($compile)对元素附加一些特定的行为。

2.3     控制器 v.s. scope

定义控制器

wxPanelModule.controller(‘wxPanelCtrl‘, [ ‘$scope‘, function($scope){ // $scope作用域

//数据模型

$scope.a=1;

$scope.getA=function(){ … };

//添加方法,可以在模板中通过表达式或ngClick等事件调用

}])

作用域scope

当一个控制器通过 ng-controller 指令被添加到DOM中时,ng 会调用该控制器的构造函数来生成一个控制器对象,这样,就创建了一个新的子级 作用域(scope)。在这个构造函数中,作用域会作为$scope参数注入其中,并允许用户代码访问它。

一般情况下,我们使用控制器做两件事:

1.初始化 $scope 对象

2.为 $scope 对象添加行为(方法)

控制器定义在各个模块中,每个控制器都有自己的作用域,因此形成一条作用域链,层级结构对应dom树结构。根作用域为$rootScope。

作用域提供了$watch方法监听数据模型变化,提供了$apply(执行$digest,检查所有由 $watch监听的数据并将其之前的值进行比较)方法将飞angular环境中发生的数据模型改变同步到angular作用域中。 (applyàdigestàwatch)

  • 控制器 --> 作用域 --> 视图(DOM)
  • 指令 --> 作用域 --> 视图(DOM)

作用域的事件传播机制:

$broadcast  $emit  $on

Service

控制器应该尽可能保持单纯,例如获取后台服务数据的逻辑应该封装在service中,通过依赖注入到controller中。Service同样也是定义在module上面的。

2.4     双向数据绑定

据模型始终是应用的单一数据源

脏检查----见scope小节

2.5     依赖注入DI

背后是通过Injector来创建和查找依赖的。

注入方式

moduleA.controller(‘ctrl1‘,[‘$scope‘,‘dep1‘, ‘dep2‘,…, function($scope, dep1, dep2,…){ … }]);

2.6     路由 (原生 v.s. ui-router)

3       webpack

webpack帮助我们绑定各个模块,并构建出一张依赖图。

3.1     配置

配置文件导出的是一个对象(CommonJS模块)

示例

const path = require(‘path‘);

module.exports = {

entry: ‘./index.js‘,

output: {

path: path.resolve(__dirname, ‘dist‘),

publicPath: "/assets/",

filename: ‘bundle.js‘    //"bundle-[name]-[hash:8].js",

},

module: {

rules: [{

test: /\.js$/,

use: ‘babel-loader?presets=es2015‘

}, {

test: /\.css$/,

use: [‘style-loader‘, ‘css-loader‘]

}

]

}

};

3.2     加载器

将各种类型的文件进行模块化,之后我们就可以import了。例如有了css-loader我们就可以直接在js文件里import css文件。

特点:链式;可接收参数;最终返回javascript ;

更多loader请参考:https://webpack.js.org/loaders/

3.3     插件

插件是对loader的补充,可以用来做优化/压缩等,webpack本身也是也是一种插件的形式。

e.g.代码压缩:

  1. 引入插件: const webpack = require(‘webpack‘);
  2. new出一个新实例:new webpack.optimize.UglifyJsPlugin()

注:使用js压缩时,最好使用数组方式依赖注入,否则可能压缩不成功。

更多插件请参考: https://webpack.js.org/plugins/

3.4     运行

webpack

webpack-dev-server  (webpack-dev-server --hot --inline)

http://localhost:8080/

官网:https://webpack.js.org/concepts/

4       注意

4.1     Angular模块 v.s. ES6模块化

Angular模块

  1. ng,ngRoute,ngSanitize,ngAnimate… ; 依赖注入;

  

  2.  自定义的angular模块,如angular.module(‘app.wxPageModule‘, []);

ES6模块

import …

export …

以文件为单位

4.2     $watch效率

Angular进行为实现双向绑定,进行脏检查时会频繁用到$watch方法,所以不要在此方法里做与dom相关的操作,影响效率。

一个angular页面理想状况为200左右的$watch,一般大家默认2000$watch为上限(IE),这是为了页面更好的体验效果,而并不意味着一定是angular dirty check上限。

4.3     html5Mode

$locationProvider.html5Mode(true).hashPrefix(‘!‘);

4.4     Webpack多个loader倒序执行

{

test: /\.css$/,

use: [‘style-loader‘, ‘css-loader‘, ‘postcss-loader‘]

}

顺序:postcss-->css-->style

最后的最后,demo的github地址: https://github.com/tinatingzhang/angualrjs_webpack

angular.element(aDomElement).XXX

//AMD

require([‘moduleA‘, ‘moduleB‘], function (moduleA, moduleB){

alert(‘加载成功‘);

});

//CMD

seajs.use("../static/hello/src/main")

//CommonJS

module.export = {

name:‘rouwan‘

}

//es6模块

import {module1, module2} form ‘./module.js‘;

export {module1}

时间: 2024-11-08 23:01:40

虽然今天angular5发布了,但我还是吧这篇angularjs(1)+webpack的文章发出来吧哈哈哈的相关文章

[转帖]CentOS 8 都发布了,你还不会用 nftables?

https://www.cnblogs.com/ryanyangcs/p/11611730.html 改天学习一下 原文链接:CentOS 8 都发布了,你还不会用 nftables? 如果你没有生活在上个世纪,并且是云计算或相关领域的一名搬砖者,那你应该听说最近 CentOS 8 官方正式版已经发布了,CentOS完全遵守 Red Hat 的再发行政策,并且致力与上游产品在功能上完全兼容.CentOS 8 主要改动和 RedHat Enterprise Linux 8 是一致的,基于 Fedo

新华社受权发布“十三五”规划纲要 共分为20篇(

新华社受权发布"十三五"规划纲要 共分为20篇(全文/图表) 分享到: 539 2016-03-17 16:00:48字号:A- A A+来源:新华社 关键字:十三五规划全文 2016年,是中国全面建成小康社会决胜阶段的开局之年,也是推进结构性改革的攻坚之年.这一年,中国将在新的历史起点上大展宏图. 新华社将于今日下午播发<政府工作报告>和"十三五"规划纲要,其中,<政府工作报告>共分三个部分,约2万字,"十三五"规划纲要

还来一篇说下json_value 以及 json_query 的应用 (3)

上一篇说了一下openjson 的一些使用方法,这次再说一下在2016里面的查询取值,当然就是 json_query 和 json_value 这2兄弟了 首先 declare @json varchar(100) = '{"a":"[6,4]","b":[7,4],"c":"hi"}' select json_query(@json,'$.a'),json_value(@json,'$.a') NULL

设计和发布无代码的 InfoPath 表单 (篇二)

1. 新建 InfoPath 表单 常用表单模板有很多, 这边主要介绍从 "空白表单" 创建表单. ( InfoPath Filler 表单是指通过客户端打开的表单, 一般我们设计的表单都是通过 web 打开的表单) 由于跟 Office 操作界面一样, 可以自己插入表格, 修改样式等 当我们插入一个 "文本框" 控件的时候, 右侧域会自动增加对应的字段来存储该控件的值 可以右键 "域1" 将其名称设置成一个通俗易懂的名字 经过一些操作我们可以设

极客时间-左耳听风-程序员攻略-分布式架构入门

分布式系统涵盖的面非常广,具体来说涵盖如下几方面: 服务调度,涉及服务发现.配置管理.弹性伸缩.故障恢复等. 资源调度,涉及对底层资源的调度使用,如计算资源.网络资源和存储资源等. 流量调度,涉及路由.负载均衡.流控.熔断等. 数据调度,涉及数据复本.数据一致性.分布式事务.分库.分表等. 容错处理,涉及隔离.幂等.重试.业务补偿.异步.降级等. 自动化运维,涉及持续集成.持续部署.全栈监控.调用链跟踪等. 所有这些形成了分布式架构的整体复杂度,也造就了分布式系统中的很多很多论文.图书以及很多很

友谊的小船说翻就翻,谁还在和VMware同一条船?

去年十月份Dell对EMC约670亿美元的收购仍然在业内被人频频谈起,不过本着先看后说的态度一直没有发表评论,现在这场世纪收购已经过去差不多半年了,业内也有了不少的新变化,是时候坐下来来聊聊一下这场变革对业内,特别是对VMware公司的影响. 股价,人事变动 我们还是先来看看股价吧,这是最直接判断一家公司是否健康成长的标志.下图就是过去的七个月中VMware公司股价的变化. Dell对EMC的收购对VMware绝对不是一个好事情,从股价上看,VMware的股价从收购前的超过80美元/股直线跳水到

Qt入门之基础篇 ( 二 ) :Qt项目建立、编译、运行和发布过程解析

转载请注明出处:CN_Simo. 题解: 本篇内容主讲Qt应用从创建到发布的整个过程,旨在帮助读者能够快速走进Qt的世界. 本来计划是讲解Qt源码静态编译,如此的话读者可能并不能清楚地知道为何要静态编译,所以借此篇内容说明一下原由并为之后文章的学习做准备. 即使本片内容只是在围绕一个小小的HelloWorld程序开展,但还是希望朋友们不要急于求成,"欲速则不达". 文章整体思路: 我们循序渐进地来看,一个Qt应用的完成有以下一个重要的步骤: 项目创建->源码编译->程序运行

IBM规则引擎(ODM)入门系列二(2):规则项目打包、发布及服务端测试

上一篇博文介绍了如何搭建安装res服务,这次一起来看看如何在Rule Designer中创建RuleApp并将其发布到Res服务上. 打开Rule Designer,查看一下我们的规则项目: 以PersonRule规则项目为例,如上图中,在“规则项目图”视图中,点击“创建RuleApp项目”: 输入项目名“PersonRuleApp”,点击下一步: 因为点击的是PersonRule规则集项目的“创建RuleApp”导航链接,所以这里选择规则集项目默认为“PersonRule”,点击完成. 此时在

第六篇 Replication:合并复制-发布

本篇文章是SQL Server Replication系列的第六篇,详细内容请参考原文. 合并复制,类似于事务复制,包括一个发布服务器,一个分发服务器和一个或多个订阅服务器.每一个发布服务器上可以定义多个发布.你也可以同时在同一台发布服务器上定义合并发布.事务发布和快照发布.同事务复制,每一个发布所包含的项目需要是单一数据库中的对象.不同的发布可以定义在不同的数据库上.一个项目可以被多个发布使用.All publications on a publisher, independent of th