关于angularjs:angularjs-学习笔记

angularjs官网Awesome AngularJSangularjs菜鸟学院angular 中文网angular老手常常会碰到的坑angularjs外围性能介绍所有的货色都是绑在module下面的 angular .module('app', []) // module .factory() // 工厂 .service() // 服务 .controller() // 控制器 .directive() // 指令 .filter() // 过滤器 angular配置阶段 angular 过滤器具体解释 能够通过过滤器来进行各种顺叙插入等操作angular自定义过滤器demo<!DOCTYPE html><html lang="en"><head> <title>angular自定义过滤器demo</title> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1"></head><body ng-app="myapp" ng-controller="my"> <ul> <li ng-repeat="userLayer in userLayers | reverse" ng-bind="userLayer"></li> </ul></body><script src="https://cdn.bootcss.com/angular.js/1.5.3/angular.min.js"></script><script> angular.module('myapp', []) .controller('my', function($scope, $timeout) { $scope.userLayers = [1, 2, 3, 4, 5, 6, 8]; }) .filter('reverse', function() { return function(items) { return items.slice().reverse(); } })</script></html>angular 罕用指令angular所有指令大全 ...

May 16, 2023 · 4 min · jiezi

关于angularjs:Y-分钟速成-AngularJS

源代码下载: learnangular-cn.html AngularJS 教程AngularJS 1.0 版在 2012 年公布。Miško Hevery, 一位 Google 员工, 从 2009 年开始开发 AngularJS。后果发现这个想法很好,从而该我的项目当初也被 Google 官网所反对了。 AngularJS 是一个 JavaScript 框架。它能够通过一个 "script" 标签增加到一个 HTML 页面中。AngularJS 通过指令扩大了 HTML 属性,并且通过表达式将数据绑定到 HTML。 你应该曾经理解了的常识在学习 AngularJS 之前, 你应该对以下常识有了根本的理解: HTMLCSSJavaScript// AngularJS 是一个 JavaScript 框架。它是一个用 JavaScript 写的库。// AngularJS 以一个 JavaScript 文件的模式公布,并且能通过一个 script 标签增加到一个网页中:// <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"></script>///////////////////////////////////// AngularJS 扩大 HTML//AngularJS 通过 ng-directives 扩大 HTML。//ng-app 指令定义一个 AngularJS 利用。//ng-model 指令将 HTML 控件 (input, select, textarea) 的值绑定到利用的数据上。//ng-bind 指令将利用的数据绑定到 HTML 视图上。<!DOCTYPE html><html> <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"></script> <body> <div ng-app=""> <p>Name: <input type="text" ng-model="name"></p> <p ng-bind="name"></p> </div> </body></html>/* * 例子解析: * AngularJS 在网页加载后主动开启。 * ng-app 指令通知 AngularJS: <div> 元素是 AngularJS 利用的 "所有者"。 * ng-model 指令将 input 输入框的值绑定到利用的 name 变量上。 * ng-bind 指令将 <p> 元素的 innerHTML 绑定到利用的 name 变量上。*/<tag> 这里是要解析的内容 </tag>///////////////////////////////////// AngularJS 表达式// AngularJS 表达式写在双括号内: {{ 表达式 }}。// AngularJS 表达式采纳和 ng-bind 指令一样的形式将数据绑定到 HTML。// AngularJS 将在编写表达式的原样地位上 "输入" 数据。// AngularJS 表达式十分像 JavaScript 表达式:它们能蕴含文本,运算符和变量。// 例如 {{ 5 + 5 }} 或 {{ firstName + " " + lastName }}<!DOCTYPE html><html> <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"></script> <body> <div ng-app=""> <p>My first expression: {{ 5 + 5 }}</p> </div> </body></html>//如果你删除了 ng-app 指令, HTML 将原样显示表达式,不对它进行解析:<!DOCTYPE html><html> <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"></script> <body> <div> <p>My first expression: {{ 5 + 5 }}</p> </div> </body></html>// AngularJS 表达式采纳和 ng-bind 指令一样的形式将 AngularJS 数据绑定到 HTML。<!DOCTYPE html><html><script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"></script> <body> <div ng-app=""> <p>Name: <input type="text" ng-model="name"></p> <p>{{name}}</p> </div> </body></html>// AngularJS 的数字相似 JavaScript 的数字:<div ng-app="" ng-init="quantity=1;cost=5"> <p>Total in dollar: {{ quantity * cost }}</p></div>//AngularJS 的字符串相似 JavaScript 的字符串:<div ng-app="" ng-init="firstName='John';lastName='Doe'"> <p>The name is <span ng-bind="firstName + ' ' + lastName"></span></p></div>//AngularJS 的对象相似 JavaScript 的对象:<div ng-app="" ng-init="person={firstName:'John',lastName:'Doe'}"> <p>The name is {{ person.lastName }}</p></div>//AngularJS 的数组相似 JavaScript 的数组:<div ng-app="" ng-init="points=[1,15,19,2,40]"> <p>The third result is {{ points[2] }}</p></div>// 和 JavaScript 表达式一样, AngularJS 表达式能蕴含文本,运算符和变量。// 和 JavaScript 表达式不同, AngularJS 表达式能写在 HTML 内。// AngularJS 表达式不反对条件,循环和异样,而 JavaScript 表达式却反对。// AngularJS 表达式反对过滤器,而 JavaScript 表达式不反对。///////////////////////////////////// AngularJS 指令//AngularJS 指令应用前缀 ng- 扩大 HTML 属性。//ng-app 指令初始化一个 AngularJS 利用。//ng-init 指令初始化利用的数据。//ng-model 指令将 HTML 控件 (input, select, textarea) 的值绑定到利用的数据上。<div ng-app="" ng-init="firstName='John'"> <p>Name: <input type="text" ng-model="firstName"></p> <p>You wrote: {{ firstName }}</p></div>//应用 ng-init 并不常见。你将在无关控制器的章节中学习如何初始化数据。//ng-repeat 指令会反复一个 HTML 元素:<div ng-app="" ng-init="names=['Jani','Hege','Kai']"> <ul> <li ng-repeat="x in names"> {{ x }} </li> </ul></div>//ng-repeat 指令用在一个对象数组上:<div ng-app="" ng-init="names=[{name:'Jani',country:'Norway'},{name:'Hege',country:'Sweden'},{name:'Kai',country:'Denmark'}]"> <ul> <li ng-repeat="x in names"> {{ x.name + ', ' + x.country }} </li> </ul></div>// AngularJS 最适宜用于数据库 CRUD (Create Read Update Delete) 的利用。// 只需构想这些对象都是来自一个数据库的记录。// ng-app 指令定义一个 AngularJS 利用的根元素。// ng-app 指令将在页面加载后主动启动(主动初始化)利用。// 稍后你将学习如何为 ng-app 设置一个值(如 ng-app="myModule"), 来连贯代码模块。// ng-init 指令为一个 AngularJS 利用定义初始值。// 通常,你不太应用 ng-init。你会转而应用一个控制器或模块。// 你将在稍后学到更多无关控制器和模块的内容。//ng-model 指令将 HTML 控件 (input, select, textarea) 的值绑定到利用的数据上。//ng-model 指令还能://为利用的数据提供类型验证 (number, email, required)。//为利用的数据提供状态信息 (invalid, dirty, touched, error)。//为 HTML 元素提供 CSS 类。//将 HTML 元素绑定到 HTML 表单。//ng-repeat 指令为汇合(一个数组)中的每个元素克隆出 HTML 元素。///////////////////////////////////// AngularJS 控制器// AngularJS 控制器管制 AngularJS 利用中的数据。// AngularJS 控制器就是惯例的 JavaScript 对象。// AngularJS 利用由控制器管制。// ng-controller 指令定义利用的控制器。// 一个控制器就是一个 JavaScript 对象, 通过规范的 JavaScript 对象构建器创立。<div ng-app="myApp" ng-controller="myCtrl">First Name: <input type="text" ng-model="firstName"><br>Last Name: <input type="text" ng-model="lastName"><br><br>Full Name: {{firstName + " " + lastName}}</div><script>var app = angular.module('myApp', []);app.controller('myCtrl', function($scope) { $scope.firstName = "John"; $scope.lastName = "Doe";});</script>//利用的解析://AngularJS 利用通过 ng-app="myApp" 定义。该利用运行在 <div> 内。//ng-controller="myCtrl" 属性是一个 AngularJS 指令。它定义了一个控制器。//myCtrl 函数是一个 JavaScript 函数。//AngularJS 将应用一个 $scope 对象来调用控制器。//AngularJS 中, $scope 就是该利用对象(利用的变量和函数的所有者)。//该控制器在 $scope 内创立了两个属性(即变量 firstName 和 lastName)。//ng-model 指令将输出表单项绑定到控制器的属性上(firstName 和 lastName)。//以上的例子演示了一个蕴含有两个属性 lastName 和 firstName 的控制器。//一个控制器也能够有办法(函数的变量):<div ng-app="myApp" ng-controller="personCtrl">First Name: <input type="text" ng-model="firstName"><br>Last Name: <input type="text" ng-model="lastName"><br><br>Full Name: {{fullName()}}</div><script>var app = angular.module('myApp', []);app.controller('personCtrl', function($scope) { $scope.firstName = "John"; $scope.lastName = "Doe"; $scope.fullName = function() { return $scope.firstName + " " + $scope.lastName; }});</script>//在较大型的利用中, 通常是将控制器代码保留在内部文件中。//只需将 <script> </script> 标签之间的代码复制到一个名为 personController.js 的内部文件中:<div ng-app="myApp" ng-controller="personCtrl">First Name: <input type="text" ng-model="firstName"><br>Last Name: <input type="text" ng-model="lastName"><br><br>Full Name: {{firstName + " " + lastName}}</div><script src="personController.js"></script>// 为不便下个例子应用,咱们将创立一个新的控制器文件:angular.module('myApp', []).controller('namesCtrl', function($scope) { $scope.names = [ {name:'Jani',country:'Norway'}, {name:'Hege',country:'Sweden'}, {name:'Kai',country:'Denmark'} ];});//将文件保留为 namesController.js://而后在一个利用中应用该控制器:<div ng-app="myApp" ng-controller="namesCtrl"><ul> <li ng-repeat="x in names"> {{ x.name + ', ' + x.country }} </li></ul></div><script src="namesController.js"></script>///////////////////////////////////// AngularJS 过滤器// 过滤器能够通过一个管道符增加到表达式和指令上。// AngularJS 过滤器能用来转换数据:- **currency**: 将一个数字格式化成货币格局。- **filter**: 从一个数组中抉择一组子集元素。- **lowercase**: 将一个字符串格式化成小写模式。- **orderBy**: 根据一个表达式排序一个数组。- **upper**: 将一个字符串格式化成大写模式。//一个过滤器能够通过一个管道符 (|) 及一个过滤器表达式增加到一个表达式上。//(在上面的两个例子中,咱们将应用前一章中的 person 控制器)//uppercase 过滤器将字符串格式化成大写格局:<div ng-app="myApp" ng-controller="personCtrl"><p>The name is {{ lastName | uppercase }}</p></div>//lowercase 过滤器将字符串格式化成小写格局:<div ng-app="myApp" ng-controller="personCtrl"><p>The name is {{ lastName | lowercase }}</p></div>//currency 过滤器将一个数字格式化成货币格局:<div ng-app="myApp" ng-controller="costCtrl"><input type="number" ng-model="quantity"><input type="number" ng-model="price"><p>Total = {{ (quantity * price) | currency }}</p></div> //一个过滤器能够通过一个管道符 (|) 及一个过滤器表达式增加到一个指令上。//orderBy 过滤器依据一个表达式排序一个数组:<div ng-app="myApp" ng-controller="namesCtrl"><ul> <li ng-repeat="x in names | orderBy:'country'"> {{ x.name + ', ' + x.country }} </li></ul><div>//一个输入框过滤器能够通过一个管道符 (|) //以及后跟一个冒号和模式名的 filter 增加到一个指令上。//该过滤器从一个数组中抉择一个子集:<div ng-app="myApp" ng-controller="namesCtrl"><p><input type="text" ng-model="test"></p><ul> <li ng-repeat="x in names | filter:test | orderBy:'country'"> {{ (x.name | uppercase) + ', ' + x.country }} </li></ul></div>///////////////////////////////////// AngularJS AJAX - $http//$http 是一个从近程服务器读取数据的 AngularJS 服务。// 以下数据可由一个 web 服务器提供:// http://www.w3schools.com/angular/customers.php// **拜访 URL 来查看数据格式**// AngularJS $http 是一个从 web 服务器上读取数据的外围服务。// $http.get(url) 这个函数用来读取服务器数据。<div ng-app="myApp" ng-controller="customersCtrl"> <ul> <li ng-repeat="x in names"> {{ x.Name + ', ' + x.Country }} </li></ul></div><script>var app = angular.module('myApp', []);app.controller('customersCtrl', function($scope, $http) { $http.get("http://www.w3schools.com/angular/customers.php") .success(function(response) {$scope.names = response.records;});});</script>// 利用解析:// AngularJS 利用由 ng-app 定义。该利用运行在一个 <div> 中。// ng-controller 指令命名控制器对象。// customersCtrl 函数是一个规范的 JavaScript 对象结构器。// AngularJS 会应用一个 $scope 和 $http 对象来调用 customersCtrl。// $scope 就是该利用对象(利用的变量和函数的所有者)。// $http 是一个用于申请内部数据的 XMLHttpRequest 对象。// $http.get() 从 http://www.w3schools.com/angular/customers.php 读取 JSON 数据。// 如果胜利, 该控制器会依据来自服务器的 JSON 数据,在 $scope 中创立一个属性 (names)。// 向不同的服务器(不同于申请页)申请数据,称作跨站 HTTP 申请。// 跨站申请在网站上很广泛。许多网页会从不同的服务器加载 CSS,图片和脚本。// 在古代浏览器中,基于平安起因,从脚本内进行跨站 HTTP 申请是被禁止的。// 上面的这行代码,已被退出到咱们的 PHP 例子中,以便容许跨站拜访。header("Access-Control-Allow-Origin: *");///////////////////////////////////// AngularJS 表格// 应用 angular 显示表格非常简单:<div ng-app="myApp" ng-controller="customersCtrl"> <table> <tr ng-repeat="x in names"> <td>{{ x.Name }}</td> <td>{{ x.Country }}</td> </tr></table></div><script>var app = angular.module('myApp', []);app.controller('customersCtrl', function($scope, $http) { $http.get("http://www.w3schools.com/angular/customers.php") .success(function (response) {$scope.names = response.records;});});</script>// 要排序表格,增加一个 orderBy 过滤器:<table> <tr ng-repeat="x in names | orderBy : 'Country'"> <td>{{ x.Name }}</td> <td>{{ x.Country }}</td> </tr></table>// 要显示表格索引值,增加一个带有 $index 的 <td>:<table> <tr ng-repeat="x in names"> <td>{{ $index + 1 }}</td> <td>{{ x.Name }}</td> <td>{{ x.Country }}</td> </tr></table>// 应用 $even 和 $odd<table> <tr ng-repeat="x in names"> <td ng-if="$odd" style="background-color:#f1f1f1">{{ x.Name }}</td> <td ng-if="$even">{{ x.Name }}</td> <td ng-if="$odd" style="background-color:#f1f1f1">{{ x.Country }}</td> <td ng-if="$even">{{ x.Country }}</td> </tr></table>///////////////////////////////////// AngularJS HTML DOM//AngularJS 有用于将利用的数据绑定到 HTML DOM 元素属性的指令。// ng-disabled 指令将 AngularJS 利用的数据绑定到 HTML 元素的 disabled 属性上。<div ng-app="" ng-init="mySwitch=true"><p><button ng-disabled="mySwitch">Click Me!</button></p><p><input type="checkbox" ng-model="mySwitch">Button</p></div>//利用解析:// ng-disabled 指令将利用的 mySwitch 数据绑定到 HTML 按钮的 disabled 属性上。// ng-model 指令将 HTML checkbox 元素的值绑定到 mySwitch 的值上。// 如果 mySwitch 的值求值为 true,则该按钮将被禁用:<p><button disabled>Click Me!</button></p>// 如果 mySwitch 的值求值为 false,则该按钮将不会被禁用:<p> <button>Click Me!</button></p>// ng-show 指令显示或暗藏一个 HTML 元素。<div ng-app=""><p ng-show="true">I am visible.</p><p ng-show="false">I am not visible.</p></div>// ng-show 指令基于 ng-show 的值显示(或暗藏)一个 HTML 元素。// 你能够应用任何能求值成 true 或 false 的表达式:<div ng-app=""><p ng-show="hour > 12">I am visible.</p></div>///////////////////////////////////// AngularJS 事件// AngularJS 有它本人的 HTML 事件指令。// ng-click 指令定义一个 AngularJS 点击事件。<div ng-app="myApp" ng-controller="myCtrl"><button ng-click="count = count + 1">Click me!</button><p>{{ count }}</p></div><script>var app = angular.module('myApp', []);app.controller('myCtrl', function($scope) { $scope.count = 0;});</script>// ng-hide 指令可用于设置一个利用的局部区域的可见性。// 值 ng-hide="true" 使得一个 HTML 元素不可见。// 值 ng-hide="false" 使得一个 HTML 元素可见。<div ng-app="myApp" ng-controller="personCtrl"><button ng-click="toggle()">Toggle</button><p ng-hide="myVar">First Name: <input type="text" ng-model="firstName"><br>Last Name: <input type="text" ng-model="lastName"><br><br>Full Name: {{firstName + " " + lastName}}</p></div><script>var app = angular.module('myApp', []);app.controller('personCtrl', function($scope) { $scope.firstName = "John", $scope.lastName = "Doe" $scope.myVar = false; $scope.toggle = function() { $scope.myVar = !$scope.myVar; };});</script>//利用解析:// personController 的第一局部和讲述控制器章节中的一样。// 该利用有一个默认属性(一个变量):$scope.myVar = false:// ng-hide 指令根据 myVar 的值(true 或 false),// 设置 <p> 元素的可见性,该元素含有两个输入框。// 函数 toggle() 将 myVar 在 true 和 false 间进行切换。// 值 ng-hide="true" 使得该元素不可见。// ng-show 指令也能用来设置一个利用的某局部的可见性。// 值 ng-show="false" 使得一个 HTML 元素不可见。// 值 ng-show="true" 使得一个 HTML 元素可见。// 这个例子与下面的一样,但用 ng-show 代替了 ng-hide:<div ng-app="myApp" ng-controller="personCtrl"><button ng-click="toggle()">Toggle</button><p ng-show="myVar">First Name: <input type="text" ng-model="firstName"><br>Last Name: <input type="text" ng-model="lastName"><br><br>Full Name: {{firstName + " " + lastName}}</p></div><script>var app = angular.module('myApp', []);app.controller('personCtrl', function($scope) { $scope.firstName = "John", $scope.lastName = "Doe" $scope.myVar = true; $scope.toggle = function() { $scope.myVar = !$scope.myVar; }});</script>///////////////////////////////////// AngularJS 模块// 一个 AngularJS 模块定义一个利用。// 模块是一个利用的不同局部所在的一个容器。// 模块是利用控制器的一个容器。// 控制器总是隶属于一个模块。// 这个利用 ("myApp") 有一个控制器 ("myCtrl"):<!DOCTYPE html><html><script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"></script><body><div ng-app="myApp" ng-controller="myCtrl">{{ firstName + " " + lastName }}</div><script>var app = angular.module("myApp", []);app.controller("myCtrl", function($scope) { $scope.firstName = "John"; $scope.lastName = "Doe";});</script></body></html>// 在 AngularJS 利用中通常将模块和控制器搁置在 JavaScript 文件中。// 在本例中,"myApp.js" 蕴含了一个利用模块的定义,而 "myCtrl.js" 蕴含了控制器:<!DOCTYPE html><html><script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"></script><body><div ng-app="myApp" ng-controller="myCtrl">{{ firstName + " " + lastName }}</div><script src="myApp.js"></script><script src="myCtrl.js"></script></body></html>//myApp.jsvar app = angular.module("myApp", []); // 模块定义中的 [] 参数可用来定义依赖的模块。// myCtrl.jsapp.controller("myCtrl", function($scope) { $scope.firstName = "John"; $scope.lastName= "Doe";});// JavaScript 中应该防止应用全局函数。它们会非常容易地被笼罩// 或被其它脚本毁坏。// AngularJS 脚本通过将所有函数保留在模块内,缓解了这种问题。// 尽管 HTML 利用中通常是将脚本搁置在// <body> 元素的开端,但还是举荐你要么在// <head> 中要么在 <body> 的结尾处加载 AngularJS 库。// 这是因为对 angular.module 的调用只有在库被加载后能力被编译。<!DOCTYPE html><html><body><script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"></script><div ng-app="myApp" ng-controller="myCtrl">{{ firstName + " " + lastName }}</div><script>var app = angular.module("myApp", []);app.controller("myCtrl", function($scope) { $scope.firstName = "John"; $scope.lastName = "Doe";});</script></body></html>///////////////////////////////////// AngularJS 利用// AngularJS 模块定义 AngularJS 利用。// AngularJS 控制器管制 AngularJS 利用。// ng-app 指令定义该利用,ng-controller 定义该控制器。<div ng-app="myApp" ng-controller="myCtrl"> First Name: <input type="text" ng-model="firstName"><br> Last Name: <input type="text" ng-model="lastName"><br> <br> Full Name: {{firstName + " " + lastName}}</div><script> var app = angular.module('myApp', []); app.controller('myCtrl', function($scope) { $scope.firstName= "John"; $scope.lastName= "Doe"; });</script>// AngularJS 模块定义利用:var app = angular.module('myApp', []);// AngularJS 控制器管制利用:app.controller('myCtrl', function($scope) { $scope.firstName= "John"; $scope.lastName= "Doe";});起源 & 参考例子 ...

December 15, 2022 · 7 min · jiezi

关于angularjs:web-前端-AngularJS-四大特征

AngularJS 的设计思维与 jquery 齐全不同,前者操作的是变量 $scope $http,后者操作的 DOM。 MVC 模式Angular 遵循软件工程的 M(数据)V(视图)C(控制器)模式,并激励展示,数据,和逻辑组件之间的松耦合.通过依赖注入(dependency injection),Angular 为客户端的 Web 利用带来了传统服务端的服务,例如独立于视图的管制。 因而,后端缩小了许多累赘,产生了更轻的 Web 利用。 Model:数据,其实就是 angular 变量($scope.XX); View: 数据的出现,Html+Directive(指令); Controller:操作数据,就是 function,数据的增删改查; 双向绑定AngularJS 是建设在这样的信念上的:即申明式编程应该用于构建用户界面以及编写软件构建,而指令式编程非常适合来示意业务逻辑。框架采纳并扩大了传统 HTML,通过双向的数据绑定来适应动静内容,双向的数据绑定容许模型和视图之间的主动同步。因而,AngularJS 使得对 DOM 的操作不再重要并晋升了可测试性。这里是区别于 Jquery 的,jq 操作的是 dom 对象,angularJS 操作的是变量。 依赖注入依赖注入(Dependency Injection,简称 DI)是一种设计模式, 指某个对象依赖的其余对象无需手工创立,只须要“吼一嗓子”,则此对象在创立时,其依赖的对象由框架来主动创立并注入进来,其实就是起码常识法令;模块中所有的 service 和 provider 两类对象,都能够依据形参名称实现 DI.控制器就是通过依赖注入的形式实现对服务的调用 模块化设计高内聚低耦合法令 高内聚:每个模块的具体性能具体实现 低耦合:模块之间尽可能的少用关联和依赖 1)官网提供的模块 ng(最外围)、ngRoute(路由)、ngAnimate(动画) 2)用户自定义的模块 angular.module('模块名',[ ]) 想理解更多精彩内容,快来关注尚硅谷! 关键词:前端培训

April 1, 2022 · 1 min · jiezi

关于angularjs:AngularJS-四大特征

AngularJS 的设计思维与 jquery 齐全不同,前者操作的是变量 $scope $http,后者操作的 DOM。 MVC 模式Angular 遵循软件工程的 M(数据)V(视图)C(控制器)模式,并激励展示,数据,和逻辑组件之间的松耦合.通过依赖注入(dependency injection),Angular 为客户端的 Web 利用带来了传统服务端的服务,例如独立于视图的管制。 因而,后端缩小了许多累赘,产生了更轻的 Web 利用。 Model:数据,其实就是 angular 变量($scope.XX); View: 数据的出现,Html+Directive(指令); Controller:操作数据,就是 function,数据的增删改查; 双向绑定AngularJS 是建设在这样的信念上的:即申明式编程应该用于构建用户界面以及编写软件构建,而指令式编程非常适合来示意业务逻辑。框架采纳并扩大了传统 HTML,通过双向的数据绑定来适应动静内容,双向的数据绑定容许模型和视图之间的主动同步。因而,AngularJS 使得对 DOM 的操作不再重要并晋升了可测试性。这里是区别于 Jquery 的,jq 操作的是 dom 对象,angularJS 操作的是变量。 依赖注入依赖注入(Dependency Injection,简称 DI)是一种设计模式, 指某个对象依赖的其余对象无需手工创立,只须要“吼一嗓子”,则此对象在创立时,其依赖的对象由框架来主动创立并注入进来,其实就是起码常识法令;模块中所有的 service 和 provider 两类对象,都能够依据形参名称实现 DI.控制器就是通过依赖注入的形式实现对服务的调用 模块化设计高内聚低耦合法令 高内聚:每个模块的具体性能具体实现 低耦合:模块之间尽可能的少用关联和依赖 1)官网提供的模块 ng(最外围)、ngRoute(路由)、ngAnimate(动画) 2)用户自定义的模块 angular.module('模块名',[ ]) 关键词:前端培训

February 24, 2022 · 1 min · jiezi

关于angularjs:ApacheCN-Angular-译文集-20211114-更新

Angular 专家级编程 零、前言一、架构概述和在 Angular 中构建简略利用二、将 AngularJS 利用迁徙到 Angular 利用三、应用 Angular CLI 生成具备最佳实际的 Angular 利用四、应用组件五、实现 Angular 路由和导航六、创立指令和实现更改检测七、应用可察看对象的异步编程八、模板和数据绑定语法九、Angular 中的高级表单十、Angular 的材质设计十一、实现 Angular 管道十二、实现 Angular 服务十三、利用依赖注入十四、解决 Angular 动画十五、集成 Bootstrap 与 Angular 利用十六、应用 Jasmine 和 Protractor 框架测试 Angular 利用十七、Angular 设计模式Angular 2 组件 零、序言一、Angular 2 组件架构二、应用 Angular CLI 建设开发环境三、TypeScript 入门四、构建根本组件五、构建动静组件六、组件通信七、将所有内容放在一起八、集成第三方组件九、Angular 2 指令Angular 2 示例 零、前言一、开始二、构建咱们的第一个利用——7 分钟训练三、更多 Angular——SPA 和路由四、私人教练五、反对服务器数据长久化六、深度 Angular 指令七、测试私人教练八、一些理论场景Angular 测试驱动开发 零、序言一、测试驱动开发简介二、JavaScript 测试的细节三、Karma 之道四、Protractor 端到端测试五、深刻 Protractor六、第一步七、触发器八、通知世界PrimeNG:Angular UI 开发 零、前言一、开始应用 Angular 和 Priming二、主题化概念和布局三、加强输出和抉择四、按钮和面板组件五、数据迭代组件六、惊人的叠加和音讯七、无尽的菜单变动八、创立图表和地图九、杂项用例和最佳实际十、创立强壮的利用切换到 Angular 2 零、序言一、开始学习 Angular 2二、Angular 2 利用的构建块三、TypeScript 速成课四、Angular 2 组件和指令入门五、Angular 2 中的依赖注入六、应用 Angular 2 路由和表单七、解释管道和与 RESTful 服务的通信八、开发教训及服务器端渲染Angular 和 BootStrap Web 开发 ...

December 8, 2021 · 2 min · jiezi

关于angularjs:Angular-管道

问题在写流动治理详情的时候不晓得怎么用内置的日期管道,本人写了一个管道,同时在管道应用时遇到问题。查看后发现ActivityScalePipe在新建时申明在了Activity模块中,而我想在view模块中应用,就又将管道申明在了view模块中,这样就导致了下面的问题。最开始想到的解决办法时在view不必申明管道,在Activity中export ActivityScalePipe,而后在view模块中引入Activity模块,后果导致产生循环,因为在Activity模块中曾经引入了view模块。起初间接将管道申明在view模块中,而后再export管道,问题解决。但起初想到这样解决不太好,因为如果有其余模块须要用到这个管道,那么这个模块就须要引入整个view模块,显然这种写法并不合理,于是从新批改,将管道申明在pipe模块中,这样无论那个模块想应用管道都只须要引入pipe管道。起初查看其余管道也是应用这种写法。通过这个过程对组件与模块之间关系和模块之间的关系有了更深的了解。组件依赖于模块,存在于模块,组件若想成动运行,则必然是运行于某个模块之中。组件胜利运行的前提,是在模块中被胜利地实例化,模块可能胜利实例化某个组件的前提是模块领有组件想要的所有。留神:管道只能被申明在一个模块中 管道官网文档 简介管道简略来说能够了解为一个对数据转化的货色,数据在管道一端流入,通过管道转化后以另一种模式在另一端流出。管道应用 数据 | 管道名称如: 日期管道名称为‘data’ <p>The hero's birthday is {{ birthday | date }}</p>管道串联 The chained hero's birthday is{{ birthday | date | uppercase}}自定义管道要把类标记为管道并提供配置元数据,请把 @Pipe 装璜器利用到这个类上建设管道命令 ng g p 管道名称管道示例 import { Pipe, PipeTransform } from '@angular/core';@Pipe({name: 'exponentialStrength'})export class ExponentialStrengthPipe implements PipeTransform { transform(value: number, exponent = 1): string { if(valuev === 0){ return '男'; }else { return '女'; }}如果是原始类型的输出值,比方 String 或 Number ,或者是对象援用型的输出值,比方 Date 或 Array ,那么每当 Angular 检测到输出值或援用有变动时,就会执行该输出管道。同样,数组和对象中的值变动时不能检测到。解决办法能够应用新的数组或对象代替原来的对象或数组。 ...

November 20, 2021 · 2 min · jiezi

关于angularjs:Angular管道PIPE介绍

PIPE,翻译为管道。Angular 管道是编写能够在HTML组件中申明的显示值转换的办法。Angular 管道之前在 AngularJS 中被称为过滤器,从 Angular 2开始就被称为管道。管道将数据作为输出并将其转换为所需的输入。 Angular Pipes 将整数、字符串、数组和日期作为输出,用| 分隔,而后依据须要转换成格局,并在浏览器中显示进去。在插值表达式中,能够定义管道并依据状况应用它,在 Angular 应用程序中能够应用许多类型的管道。 内建管道String -> String UpperCasePipeLowerCasePipeTitleCasePipeNumber -> String DecimalPipePercentPipeCurrencyPipeObject -> String JsonPipeDatePipeTools SlicePipeAsyncPipeI18nPluralPipeI18nSelectPipe应用办法大写转换<div> <p ngNonBindable>{{ 'Angular' | uppercase }}</p> <p>{{ 'Angular' | uppercase }}</p> <!-- Output: ANGULAR --></div>日期格式化<div> <p ngNonBindable>{{ today | date: 'shortTime' }}</p> <p>{{ today | date: 'shortTime' }}</p> <!-- Output: 以以后工夫为准,输入格局:10:40 AM --></div>数值格式化<div> <p ngNonBindable>{{ 3.14159265 | number: '1.4-4' }}</p> <p>{{ 3.14159265 | number: '1.4-4' }}</p> <!-- Output: 3.1416 --></div>JavaScript 对象序列化<div> <p ngNonBindable>{{ { name: 'semlinker' } | json }}</p> <p>{{ { name: 'semlinker' } | json }}</p> <!-- Output: { "name": "semlinker" } --></div>管道参数管道能够接管任意数量的参数,应用形式是在管道名称前面增加 : 和参数值。如 number: '1.4-4' ,若须要传递多个参数则参数之间用冒号隔开,具体示例如下: ...

June 20, 2021 · 1 min · jiezi

关于angularjs:Angular模板简介

模板引擎是Web利用中用来生成动静HTML的一个路径, 负责将数据模型与HTML模板联合起来(即模板渲染),生成最终的HTML。 编写HTML模板的语法称为模板语法,模板语法的表达能力和可扩展性决定了模板引擎的易用性。本文将介绍在重构治理控制台中应用到的Angular的模板引擎ng-template。ng-template简介ng-template示意为Angular模板:这意味着此标记的内容将蕴含模板的一部分,而后能够与其余模板一起组合以造成最终的组件模板。 ng-template次要包含:ng-container、ngIf,ngFor、ngClass、ngStyle和ngSwitch。 ng-containerng-container是一个逻辑容器,是 Angular 结构型指令中的一种,用于蕴含管制外部元素的显示与否。 ng-container能够蕴含任何元素,包含文本,但自身不会生成元素标签,也不会影响页面款式和布局。蕴含的内容,如果不通过其余指令管制,会间接渲染到页面中。 根本语法<div> <ng-container> <p>This is paragraph 1.</p> <p>This is paragraph 2.</p> </ng-container></div>渲染后<div> <p>This is paragraph 1.</p> <p>This is paragraph 2.</p></div>ngIfngIf 用于依据表达式的值,在指定地位渲染 then 或 else 模板的内容。 * `then` 模板除非绑定到不同的值,否则默认是 ngIf 指令关联的内联模板。* `else` 模板除非绑定对应的值,否则默认是 null。简略模式<div *ngIf="!isLoggedIn"> Please login, friend.</div><!-- logic && operator --><div *ngIf="isLoggedIn && !isNewUser"> Welcome back, friend.</div><!-- logic OR operator --><div *ngIf="isLoggedIn || isNewUser"> Welcome!</div>应用else块<div *ngIf="isLoggedIn; else loggedOut"> Welcome back, friend.</div><ng-template #loggedOut> Please friend, login.</ng-template>应用then和else块<ng-container *ngIf="isLoggedIn; then loggedIn; else loggedOut"></ng-container><ng-template #loggedIn> <div> Welcome back, friend. </div></ng-template><ng-template #loggedOut> <div> Please friend, login. </div></ng-template>ngForngFor用于应用可迭代的每个项作为模板的上下文来反复模板的一种形式。提供了能够被局部变量别名的其余值: ...

June 20, 2021 · 1 min · jiezi

关于angularjs:浅谈Angular错误处理

错误处理是编写代码常常遇见的并且必须解决的需要,很多时候解决异样的逻辑是为了防止程序的解体,之前《浅谈前端异样监控平台实现计划》介绍过异样跟踪,本文将简略介绍Angular解决异样的形式。 什么是AngularAngualr 是一款来自谷歌的开源的 web 前端框架,诞生于 2009 年,由 Misko Hevery 等人创立,后为 Google 所收买。是一款优良的前端 JS 框架,曾经被用于 Google 的多款产品当中。 AngularJS 是基于申明式编程模式 是用户能够基于业务逻辑进行开发. 该框架基于HTML的内容填充并做了双向数据绑定从而实现了主动数据同步机制. 最初, AngularJS 强化的DOM操作加强了可测试性.try/catch最相熟的的形式,就是在代码中增加try/catch块,在try中产生谬误,就会被捕捉并且让脚本继续执行。然而,随着应用程序规模的扩充,这种形式将变得无奈治理。 ErrorHandlerAngular提供了一个默认的ErrorHandler,能够将谬误音讯打印到控制台,因而能够拦挡这个默认行为来增加自定义的解决逻辑,上面尝试编写错误处理类: import { ErrorHandler, Injectable } from "@angular/core";import { HttpErrorResponse } from "@angular/common/http";@Injectable()export class ErrorsHandler implements ErrorHandler { handleError(error: Error | HttpErrorResponse) { if (!navigator.onLine) { console.error("Browser Offline!"); } else { if (error instanceof HttpErrorResponse) { if (!navigator.onLine) { console.error("Browser Offline!"); } else { // Handle Http Error (4xx, 5xx, ect.) console.error("Http Error!"); } } else { // Handle Client Error (Angular Error, ReferenceError...) console.error("Client Error!"); } console.error(error); } }}通常在app下创立一个共享目录shared,并将此文件放在providers文件夹中当初,须要更改应用程序的默认行为,以应用咱们自定义的类而不是ErrorHandler。批改app.module.ts文件,从@angular/core导入ErrorHandler,并将providers增加到@NgModule模块,代码如下: ...

June 20, 2021 · 3 min · jiezi

关于angularjs:Angular10配置webpack打包-详细教程

对于 Angular 我的项目,举荐应用 angular-cli 创立打包我的项目 Angular 会默认帮咱们配置。 然而有非凡的需要时就显然不是很灵便,比方想宰割一些较大的打包文件、剖析每个打包文件组成,自定义webpack一些参数的时候就发现无从下手。 对许多我的项目的常见依赖项是日期库moment.js 。 这包含应用语言环境的性能,然而,它大大增加了整体捆绑软件的大小。这些都是须要咱们优化的中央。 一、ngx-build-plus 建设额定配置 这里举荐一个工具库ngx-build-plus,不须要改很多货色就能在现有我的项目进行集成。接下来教大家如何应用,具体详情能够去github上找文档。尽管官网文档上只标注到了可用版本为9,然而Angular10也是能够应用的。 应用CLI创立一个新的Angular我的项目从零搭建Angular10我的项目 先决条件在开始之前,请确保你的开发环境曾经蕴含了 Node.js® 和 npm 包管理器。 Node.jsAngular 须要 Node.js 的 8.x 或 10.x 版本。 要想查看你的版本,请在终端/控制台窗口中运行 node -v 命令。2. 增加ngx-build-plus: ng add ngx-build-plusnpm 包管理器Angular、Angular CLI 和 Angular 利用都依赖于某些库所提供的个性和性能,它们都是 npm 包。要下载和装置 npm 包,你必须领有一个 npm 包管理器。 本 “疾速上手” 中应用的是 yarn 客户端命令行界面,治理依赖包 要想查看你是否曾经装置了 yarn 客户端,请在终端/控制台窗口中运行 yarn -v 命令。 第一步:装置 Angular CLI你要应用 Angular CLI 来创立我的项目、创立利用和库代码,并执行多种开发工作,比方测试、打包和公布。 全局装置 Angular CLI。 要想应用 npm 来装置 CLI,请关上终端/控制台窗口,并输出下列命令: ...

January 21, 2021 · 10 min · jiezi

关于angularjs:夏哥事件簿-angularJS-1X-ngmodal-不能输入时间问题解决方案

解决 angularJS ng-modal 和 input type datetime 的问题(输出日期和工夫) JS .directive('formatDate', function ($filter) { return { require: 'ngModel', link: function (scope, elem, attr, ngModelCtrl) { ngModelCtrl.$formatters.push(function (modelValue) { if (modelValue) { return new Date(modelValue); } }); ngModelCtrl.$parsers.push(function (value) { if (value) { return $filter('date')(new Date(value), attr.timetype); } }); } };}); HTML <input type="datetime-local" ng-model="PM.stareTime" format-date timetype="yyyy-MM-dd hh:mm">timetype 须要的写上工夫格局

December 3, 2020 · 1 min · jiezi

关于angularjs:Angluar5ionic3实践四

背景 : 复宏汉霖我的项目的CR做完了.用时五天.超出预计工夫十天.这五天每天都在加班.终于功夫不负有心人.我当初能够开始单独开发Angluar+ionic我的项目了.之前都是用的React+AntDesign.当初算是扩大了新框架.播种满满.这里最初记录下.这两天开发过程中遇到的问题.学到的常识. 学到的常识:肯定会遇到的model弹层比方这样的需要: 进我的项目的时候抉择岗位,在我的页面又要有切换岗位的弹框.这时候就会遇到两个点.一个是model弹层.还有一个就是抽组件. 首先来看下抽组件顾名思义就是把多个用途的同一块货色抽成公共组件.这样在任何页面就能够专用.这也是我的项目必备技能.个别都把抽出来的组件放到src/components外面.来看下我的这个model弹层的公共组件怎么写的:目录构造: 代码内容:choose-job.module.ts 内容:import { NgModule } from '@angular/core';import { IonicPageModule } from 'ionic-angular';import { ChooseJobPage } from './choose-job';@NgModule({ declarations: [ChooseJobPage], imports: [ IonicPageModule.forChild(ChooseJobPage), ],})export class ChooseJobPageModule {}choose-job.ts 内容:import { Component, Input } from '@angular/core';import { NavParams,IonicPage, ViewController } from "ionic-angular";@IonicPage()@Component({ selector: 'choose-job', templateUrl: 'choose-job.html',})export class ChooseJobPage { @Input() jobList: any; // 岗位列表 checkd = { TerritoryID:'' } // 选中的岗位 // 初始化 constructor( public navParams: NavParams, public viewCtrl: ViewController,) { this.jobList = this.navParams.get('jobList'); this.checkd.TerritoryID = this.navParams.get('territoryID') || ''; } // 选中的值 radioSelected =(v)=>{ this.checkd = v } // 点击确认 determine = ()=>{ this.viewCtrl.dismiss({selectedItem: this.checkd, action: 'save'}); }}choose-job.html 内容:<ion-header class="modal-header"> <ion-navbar color="sky" padding-left padding-right> <ion-title text-center="">抉择岗位</ion-title> </ion-navbar></ion-header><ion-content style="height: 300px;"> <ion-item-group class="list"> <ion-item *ngFor="let item of jobList;let i = index" > <ion-label> <ion-row> <h3>{{item.TerritoryName}}</h3> <span class="tr">({{item.isPartTime ? "代岗" : "主岗" }})</span> </ion-row> </ion-label> <ion-radio (click)="radioSelected(item)" [checked]="checkd.TerritoryID === item.TerritoryID" ></ion-radio> </ion-item> <ion-row justify-content-center align-items-center *ngIf="jobList?.length === 0"> <img src="assets/icon/no_data.png" alt="" width="70" style="margin-top: 150px"/> </ion-row> </ion-item-group> <button ion-button class="save" (click)="determine()"> 确定 </button></ion-content>choose-job.scss 内容:approve-list { .list{ max-height: 200px; overflow-x: hidden; } .tr{ color: #32a3e7; font-size: 12px; margin-left: 5px; } .save{ width: 87%; background: #32a3e7; margin: 20px; position: absolute; bottom: 0; }}内容解析:这个公共组件须要的参数只有两个.一个jobList还有一个territoryID.(刚进页面的时候是没有默认值的,在我的外面切换岗位的时候,是须要默认为本人登陆的岗位)须要留神的中央:(1): 调用组件是须要在组件页的类上方定义@IonicPage()的.不然获取不到的.(2): 不加@IonicPage()的组件是被用作标签应用.不须要choose-job.module.ts.在components的公共components.module.ts外面导出就好了. ...

September 18, 2020 · 2 min · jiezi

关于angularjs:Angluar5ionic3实践三

背景: 这几天在做复宏汉霖的报表.用到了echarts.git到了一个新性能.原来没有用过的.哈哈哈.三张报表.动态页面画的画了两天.明天来整顿下学到的知识点. 意识下echartsecharts官网地址外面有许许多多的图例.目前我须要用到的是饼图Pie和柱状图Bar. 实际饼图Pie先看下实现成果:由上图可看出理论覆盖率用的是饼图.这里用到的就是echarts的 Pie. 实现逻辑:html 页面代码: <ion-row justify-content-between > <div no-margin class="font-12 echarts-title" style='border-bottom: none !important;'> <span style='margin:0px 0px 10px 0px;color: #14a3d9;display: block;'>理论笼罩客户数</span> <div style="position: relative; margin-left: 10%;"> <img src="assets/icon/actual.png" alt="" style="width: 80px;margin-left: 40%;"/> <p class='number'>10000人</p> </div> </div> <div no-margin class="font-12 echarts-title" style='border-bottom: none !important;'> <span style='margin:0px 0px 0px -40px;color: #d98a14;display: block;'>理论覆盖率</span> <div #chart1 style='width:100px;height:100px;' ></div> </div> </ion-row>ts 页面代码:export class VisitReportPageNew { @ViewChild("chart1") chart1: ElementRef; ionViewWillEnter() { this.setChart1(); } setChart1() { const ec = echarts as any; const container = this.chart1.nativeElement; const chart = ec.init(container); chart.setOption({ title: { show: true, x: "center", y: "center", text: 85 + "%", itemGap: 0, // 主副标题间距 textStyle: { fontSize: "13", color: "#d98a14", }, subtext: "", subtextStyle: { fontSize: "13", color: "#5B697A", fontWeight: "600", }, }, color: ["#d98a14", "#f1dbbb"], series: { name: "", type: "pie", radius: ["72%", "82%"], avoidLabelOverlap: true, hoverAnimation: false, labelLine: { normal: { show: false, }, }, data: [ { value: 85, name: "" }, { value: 15, name: "" }, ], }, }); }}还有css和module.ts页面的代码关联不大我就不放了.这里次要记住的一些基本参数.series.type : 定义图形形态series.radius : 图形大小,第一个参数是外圈,第二个参数是内圈color : 图形色彩,第一个参数是散布圈次要色彩,第二个参数是残余内容色彩title.text : 图形两头的文字title.textStyle : 图形两头的文字的款式series.data : 占比值实际饼图稍简单版Pie先看下实现成果:上图中的访问次数散布by访问目标的图就是稍简单版的饼图.来看下代码: ...

September 15, 2020 · 3 min · jiezi