Angular JS入门

️将流式结构--->模块化

一、事件监听

1.事件监听

前言
NG框架中通过对元素标签添加[ng-事件名] 指令,来对元素添加事件监听
而事件监听的回调函数需要在controller中通过$scope来实现说明:整个过程类似html事件 - 语法:
<E ng-事件名称='回调函数名(NG变量)'></E>
$scope.回调函数名 = function (形参){
- 在函数中形参就是传入的NG变量的值
ng-click、ng-model
<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml" ng-app="app" ng-controller="mainController"> <head>
<meta charset="utf-8" />
<title ng-bind="title"></title>
</head>
<body>
<p ng-show="showFlag">{{content}}</p>
<button ng-click="eventHandler()">Click Here!!!</button>
<ul>
<li ng-repeat="movie in movies track by $index" ng-click="clickInLi($index)">{{movie}}</li>
</ul>
<!--angularjs-->
<script src="js/angular-1.5.5/angular.js"></script>
<script>
var app = angular.module('app', []);
app.controller('mainController', ['$scope', function ($scope) {
$scope.title = "event listen";
$scope.content = "TEST";
$scope.showFlag = true;
$scope.eventHandler = function () {
console.log('this is a test in click...');
$scope.showFlag = !$scope.showFlag;
}; $scope.movies = ['fight club(1999)', 'Seven(1995)', 'Inglourious Basterds(2009)'];
$scope.clickInLi = function (index) {
console.log('you cick item ' + index + ' ,the movie is ' + $scope.movies[index]);
}
}]); /*
1.事件监听
描述:
NG框架中通过对元素标签添加【ng-事件名】指令,来对元素添加事件监听
而事件监听的函数需要在controller中,通过$scope来实现
说明:
整个过程类似于html事件
语法:
<E ng-事件名称='回调函数名(NG变量)'></E>
...
$scope.回调函数名=function(形参){
//在函数中形参就是传入的NG变量的值
}
*/
</script>
</body>
</html>

‍♀️ tips:

ng-repeat='product in products track by $index'
//这样做之后,angular就知道有dom有哪些变动, DOM只重绘了修改和增加的项。
//在使用AngularJS的时候,如果用ng-repeat指令遍历一个数组,当数组中有重复元素的时候,angularjs会报错:

2.评论案例


<!DOCTYPE html>
<html ng-app="app" ng-controller="mainCtrl">
<head>
<title ng-bind="title"></title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="stylesheet" href="libs/bootstrap4/css/bootstrap.min.css">
<script src="libs/jquery/css/jquery-1.11.1.js"></script>
<script src="libs/angular-1.5.5/angular.js"></script> </head>
<body> <div class="container">
<br />
<!--评论模块-->
<div class="input-group">
<input type="text" class="form-control" ng-model="comt" />
<span class="input-group-btn">
<button class="btn btn-primary" ng-click="submitComment(comt)">评论</button>
</span>
</div>
<!--评论内容-->
<h3 ng-show="commentArr.length>0">评论</h3>
<ul class="list-group">
<li class="list-group-item" ng-repeat="comment in commentArr track by $index">
<span>{{comment}}</span>
<a href="javascript:;" class="btn btn-link" ng-click="deleteComment($index)">删除此评论</a>
</li>
</ul> </div> <script>
var app = angular.module('app', []);
app.controller('mainCtrl', ['$scope', function ($scope) {
$scope.title = "Bootstrap 实例";
$scope.commentArr = [];//声明评论集合数组
//提交评论
$scope.submitComment = function (comt) {
$scope.commentArr.push(comt);
$scope.comt = '';
};
//删除评论
$scope.deleteComment = function (index) {
$scope.commentArr.splice(index, 1); };
}]);
</script>
</body>
</html>
_.without($scope.commentArr,$scope.commentArr[index]);//弊端:会删除数组中的重复元素
$scope.commentArr.splice(index,1);//删除指定元素

二、AnqularJS 多控制器思想与模块化编程架构

1.背景

ng-controller与多控制器思想能够看到angular的操作,实际上脚本代码都是写在controller之中的描述;
而刚刚我们将所有的脚本都堆积到一个控制器中的操作虽然理解上变得容易,但是实际开发过程中则会造成灾难所以为了便于团队开发,
为了便于维护NG提出了[多控制器思想]

2.说明

  1. 多控制器思想:

    类似于div中的布局思想,是将控制器按照页面的不同模块功能进行切分一个控制器

    只用来控制一个功能模块,多个控制器之间互不影响,独立工作。

  2. 优势:

    分工明确,代码清晰,便于维护当系统出现问题,能够立即定位到问题坐标

  3. 弊端:

    对于初学者而言,前期代码的架构会变得很繁琐,对初学者不是很友好

3.强调

  1. 每一个控制器只要被声明,就必须通过.controller实现即便控制器中没有代码,也必须写出;

  2. 每一个控制器作用域可以认为是嵌套的,即外层controller可以直接访问到内层controller内的NG变量而同级controller之间互不影响;

  3. 对于程序,习惯上mainController作为用户默认加载页面的根控制器;

4.多控制器-代码优化



5.模块化编程

-- 创建js文件
-- js下创建 apps(自写),libs(系统外写);
-- apps下创建 controllers文件夹:用于置放控制器js



三、AnqularJS 路由router

1.理论知识


1.router 路由

描述:

​ router路由是由angularjs中提出的,用于构建单页面应用的模块。

​ 其本质从a标签点击跳转功能延展而来的。

说明:

(1)router功能的实现需要依赖于angularjs的扩展文件 angular-route.min.js

(2)router功能的实现需要依赖于ng-view;

【ng-view】作用,提供标注怕【显示不同页面的容器】的作用;

(3)router 功能的实现需要依赖于a标签的href属性;

href='#要加载的页面代号'

此属性设置的作用是在a标签点击的额时候能够通知路由,要加载哪一个页面;

(4)router路由的具体语法是通过app页面数据模型创建的

通过config方法来构建一个路由

在路由中,通过.when() 来判定加载哪一个页面;

在路由中,通过.otherwise 来决定路由默认加载哪一个页面;

语法:

 app模型.config(['$routeProvider',function($routeProvider){
$routeProvider
.when('/页面代号',{
templateUrl:'要加载页面的url地址(以路由所在的地址为起点)',
controller:'对应页面的控制器名称'
})
...
.otherwise({
redirectTo:'/默认加载页面的代号'
});
}]);

注意:

(1)如果需要使用路由功能,那么在创建页面数据模型app的时候,

必须要注入一条名为【ngRoute】的信息,此注入信息相当于对当前页面声明:我要使用路由功能

语法:var app=angular.module('app',['ngRoute']);

(2)在承载不同页面的容器上不要忘记添加 ng-view,否则路由选中的页面无法加载。

2.实际代码




showinfo.html

showname.html

JS代码

3.路由与app模块化


流式-->模块化
文件目录结构



工程模块化

index.html

route.js

showname.html

shownameController.js

showinfo.html

showinfoController.js

路由模板等同于

4.路由案例与$rootScope

以上内容,来自于B站学习记录

Angular JS入门 (一)事件监听(二)多控制器思想与模块化编程(三)路由router的更多相关文章

  1. [No00006A]Js的addEventListener()及attachEvent()区别分析【js中的事件监听】

    1.添加时间监听: Chrom中: addEventListener的使用方式: target.addEventListener(type, listener, useCapture); target ...

  2. SpringBoot入门之事件监听

    spring boot在启动过程中增加事件监听机制,为用户功能拓展提供极大的便利,sptingboot支持的事件类型有以下五种: ApplicationStartingEvent Applicatio ...

  3. Node.js自定义对象事件监听与发射

    一.Node.js是以事件驱动的,那我们自定义的一些js对象就需要能监听事件以及发射事件.在Node.js中事件使用一个EventEmitter对象发出,该对象在events模块中.它应该是使用观察者 ...

  4. Angular.js中使用$watch监听模型变化

    $watch简单使用 $watch是一个scope函数,用于监听模型变化,当你的模型部分发生变化时它会通知你. $watch(watchExpression, listener, objectEqua ...

  5. JS使用 popstate 事件监听物理返回键

    pushHistory();        window.addEventListener("popstate", function (e) {            if (or ...

  6. js事件监听-addEventListener (w3c标准) 和 attachEvent(ie)

    研究了一个小时,没看懂这两个属性 window.onload = function(){ var oDiv = document.getElementById("J_myDiv") ...

  7. React.js 小书 Lesson9 - 事件监听

    作者:胡子大哈 原文链接:http://huziketang.com/books/react/lesson9 转载请注明出处,保留原文链接和作者信息. 在 React.js 里面监听事件是很容易的事情 ...

  8. 关于实现自定义Dialog和实现Dialog里view的事件监听的两种方法

    一.自定义dialog. 二.实现dialog里view的事件监听 1.自定义dialog比较简单.在实例化new的时候,加入样式,布局就行了.或者重写dialog. 2.实现dialog里view的 ...

  9. 分享一下事件监听addEventListener----attachEvent的用法

    来自:http://www.cnblogs.com/wkylin/archive/2011/10/09/2203161.html 事件监听addEventListener----attachEvent ...

  10. WebView使用详解(二)——WebViewClient与常用事件监听

      登录|注册     关闭 启舰 当乌龟有了梦想……       目录视图 摘要视图 订阅 异步赠书:Kotlin领衔10本好书      免费直播:AI时代,机器学习如何入门?      程序员8 ...

随机推荐

  1. 被iframe页面更改顶层的跳转链接

    界面被其他网页Iframe,需要修改顶层链接---方法如下 <!DOCTYPE html> <html lang="en"> <head> &l ...

  2. MySQL 留存率和复购率的场景分析

    实际工作中常见的业务场景是求次日留存率,还有一些会对次日留存率增加限制,例如求新用户的次日留存率或者求活跃用户留存率.另外,留存率和复购率看起来都是统计重复出现的概率,但实际求解方法是不一样的. [场 ...

  3. Blazor入门100天 : 身份验证和授权 (2) - 角色/组件/特性/过程逻辑

    目录 建立默认带身份验证 Blazor 程序 `角色/组件/特性/过程逻辑 DB 改 Sqlite 将自定义字段添加到用户表 脚手架拉取IDS文件,本地化资源 freesql 生成实体类,freesq ...

  4. 程序员必备的数据库知识 2:Join 算法

    前言 连接(Join)是关系数据库重要特性,它和事务常被作为数据库与文件系统的两个重要区别项.程序员江湖一直流传着某某 baba 的神秘开发宝典,其中数据库部分有重要一条避免过多表的 Join,奈何 ...

  5. mysql 错误解决大法 Specified key was too long; max key length is 767 bytes

    高版本mysql向低版本(5.7以下)导入sql时可能会发生此问题 开启索引最大长度 SET GLOBAL INNODB_LARGE_PREFIX = ON; 将表改为动态表SET GLOBAL in ...

  6. Altium Designer v23.0.1.38图文详解

    Altium Designer (AD)  最新安装河蟹教程 ,ltium designer  显著地提高了用户体验和效率,利用时尚界面使设计流程流线化,同时实现了前所未有的性能优化.使用64位体系结 ...

  7. sort()排序以及多个属性数组对象排序(按条件排序)

    原生排序 let arr = [5,2,1,4,9,8] for(let i = 0 ; i < arr.length ; i ++) { for(let j = 0 ; j < arr. ...

  8. Spring Boot Hello World 基于 IDEA 案例详解

    一.Spring Boot 是什么 世界上最好的文档来源自官方的<Spring Boot Reference Guide>,是这样介绍的: Spring Boot makes it eas ...

  9. 【SDOI2015】星际战争

    #include<cstdio> #include<queue> using namespace std; const int M = 10000; const double ...

  10. 代码随想录算法训练营day22 | leetcode 235. 二叉搜索树的最近公共祖先 ● 701.二叉搜索树中的插入操作 ● 450.删除二叉搜索树中的节点

    LeetCode 235. 二叉搜索树的最近公共祖先 分析1.0  二叉搜索树根节点元素值大小介于子树之间,所以只要找到第一个介于他俩之间的节点就行 class Solution { public T ...