AngularJs入门实例
来源:互联网 发布:淘宝众筹平台入口 编辑:程序博客网 时间:2024/05/22 06:28
《一》、四大核心思想
1、MVC
2、模块化和依赖注入
3、双向绑定
4、语义化标签(指令)
《二》、使用ng内置指令
1、ng-app 指令定义了AngularJs应用程序
2、ng-controller 定义了控制器, 用于控制 AngularJS 应用
3、ng-init 指令为 AngularJS 应用程序定义了 初始值。
4、ng-model 指令把元素值(比如输入域的值)绑定到应用程序
5、ng-bind 指令把应用程序数据绑定到HTML视图
6、ng-repeat 指令实现循环输出(特有属性:$index、$first、$last
)
7、ng-hide 指令实现元素显示和隐藏,Dom不会移除
8、ng-if 指令实现逻辑判断,Dom会移除
9、ng-show 属性返回 true 的情况下显示
ng-src、ng-checked、ng-href、ng-class、ng-selected、ng-change、ng-submit、ng-disabled…
<!DOCTYPE html><html><head> <meta charset="UTF-8"> <link rel="stylesheet" href="css/bootstrap.min.css"> <title>AngularJs指令Demo</title></head><body style="padding:20px;" ng-app="todoList"><input type="text" ng-model="data.msg"/><div ng-show="1==1" class="{{data.msg}}">我是一个{{data.msg}}</div><!-- 双向binding绑定 --><div ng-bind="'用户名:'+data.msg"></div><hr><!-- controller的作用域 --><div ng-controller="myFirstCtrl"> 名1: <input type="text" ng-model="firstName" ng-init="firstName='John'"><br> 姓1: <input type="text" ng-model="lastName" ng-init="lastName='Doe'"><br> <br> 姓名: {{firstName + " " + lastName}} <div ng-controller="mySecondCtrl"> 名2: <input type="text" ng-model="firstName"><br> 姓2: <input type="text" ng-model="lastName"><br> <br> 姓名: {{firstName + " " + lastName}} </div></div><hr><div ng-controller="TaskCtrl"> <div class="input-group"> <input type="text" class="form-control" ng-model="task"> <span class="input-group-btn"> <button class="btn btn-default" ng-click="add()">提交</button> </span> </div> <!-- 控制"任务列表"的显示和隐藏的两种方法 --> <h4 ng-if="tasks.length>0">任务列表</h4> <!--<h4 ng-hide="tasks.length==0">任务列表</h4>--> <ul class="list-group"> <!-- track by $index 通过下标管理数组,即数组内容可以一样--> <li class="list-group-item" ng-repeat="item in tasks track by $index">{{item}} <a ng-click="tasks.splice($index,1)">删除</a> </li> </ul></div></body><script src="js/angular.min.js"></script><script type="text/javascript"> angular.module('todoList', []) .controller('myFirstCtrl', function ($scope) {//AngularJS 控制器控制应用:// $scope.firstName = "John";// $scope.lastName = "Doe"; }) .controller('mySecondCtrl', function ($scope) {//AngularJS 控制器控制应用: $scope.firstName = "Tom"; $scope.lastName = "MO"; }) .controller('TaskCtrl', function ($scope) { $scope.task = ""; $scope.tasks = []; $scope.add = function () { $scope.tasks.push($scope.task); } });</script></html>
《三》、使用Directive自定义HTML组件
1、匹配模式:元素名(E)、属性(A)、类名(C)、注释(M)
a、元素名:<runoob-directive></runoob-directive> b、属性:<div runoob-directive></div> c、类名:<div class="runoob-directive"></div> d、注释:<!-- directive: runoob-directive -->
2、使用驼峰法来命名一个指令,runoobDirective;但在使用它时需要以 - 分割, runoob-directive:
<body ng-app="myApp"><runoob-directive></runoob-directive><div runoob-directive></div><div class="runoob-directive"></div><!-- directive: runoob-directive --><script src="js/angular.min.js"></script><script> var app = angular.module("myApp", []); app.directive("runoobDirective", function() { return { restrict : "EACM", //不写的话,默认A replace : true, //替换掉自定义runoobDirective标签 template : "<h1>自定义指令!</h1>" //如:templateUrl: 'hello.html' }; });</script><p><strong>注意:</strong> 需在该实例添加<strong>replace</strong> 属性,否则注释不可见</p><p><strong>注意:</strong> 设置 <b>restrict</b> 的值为 "EACM" 中某个/某几个调用对应指令。</p></body></html>
《四》、Directive与Controller之间的会话
1、link函数一般用来操作DOM、绑定事件监听器
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <link rel="stylesheet" href="css/foundation.min.css"/> <title>Directive与Controller之间的会话</title></head><body style="padding: 20px;" ng-app="app"><div ng-controller="AppCtrl"> <div enterattr="delData()">I'm here!</div> <hello></hello> <food apple orange>所有水果</food> <food orange>苹果</food></div><script src="js/angular.min.js"></script><script type="text/javascript"> var app = angular.module('app', []); app.controller('AppCtrl', function ($scope) { $scope.loadMoreData = function () { alert("正在加载数据..."); } $scope.delData = function () { alert("正在删除数据..."); } }); app.directive('enterattr', function () { return function (scope, element, attrs) { element.bind('mouseenter', function () { //绑定鼠标经过事件 element.addClass('alert-box'); //添加属性 scope.$apply(attrs.enterattr);//获取并执行属性值——delData()函数 }) } }); app.directive('hello', function () { return { restrict: 'E', template: '<div><input ng-model="txt" ></div><div>{{txt}}</div>', link: function (scope, element) { scope.$watch('txt', function (newVal) { //监听txt的值 if (newVal === 'error') { element.addClass('alert-box'); } }) } } }); app.directive('food', function () { return { restrict: 'E', scope: {}, //每个指令都有一个自己独立的scope controller: function ($scope) { $scope.foods = []; this.addApple = function () { $scope.foods.push('apple'); } this.addOrange = function () { $scope.foods.push('orange'); } }, link: function (scope, element, attrs) { element.bind('mouseenter', function () { console.log(scope.foods); }); } } }); app.directive('apple', function () { return { require: 'food', //引入上面的自定义food组件 link: function (scope, element, attrs, foodCtrl) { //foodCtrl是上面的food的controller控制器 element.bind('mouseenter', function () { foodCtrl.addApple(); }); } } }); app.directive('orange', function () { return { require: 'food', //引入上面的自定义food组件 link: function (scope, element, attrs, foodCtrl) { //foodCtrl是上面的food的controller控制器 element.bind('mouseenter', function () { foodCtrl.addOrange(); }); } } });</script></body></html>
有个小bug,第一次划过“苹果”并没添加成功,知道原因的望留言指点,感激不尽
《五》、scope作用域
1、$scope 中变量和方法的使用
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <link rel="stylesheet" href="css/foundation.min.css"/> <title>登录</title></head><body style="padding:20px;" ng-app="app"><div ng-controller="MyCtrl"> <!-- 使用$scope中的方法 --> <input type="text" ng-model="msg"> <h3>{{myReverse()}}</h3> <input type="text" ng-model="user.name"> <input type="text" ng-model="user.pwd"> <div class="button" ng-click="login()">登录</div> <div class="alert-box" ng-show="errormsg.length>0">{{errormsg}}</div></div></body><script src="js/angular.min.js"></script><script type="text/javascript"> angular.module('app', []) .controller('MyCtrl', function ($scope) { $scope.msg = ""; $scope.user = {name:'', pwd: ''};//name和pwd两个属性;$scope.user.name和$scope.user.pwd $scope.errormsg = ""; $scope.myReverse = function () { //自定义反转函数 return $scope.msg.split("").reverse().join(""); } $scope.login = function() { if($scope.user.name === 'admin' && $scope.user.pwd === '12345') { console.log($scope.user); alert("登录成功"); } else { $scope.errormsg = "用户名或密码输入错误!"; } } })</script></html>
《六》、Controller之间共享数据
依赖注入(Dependency Injection,简称DI)是一种软件设计模式,在这种模式下,一个或更多的依赖(或服务)被注入(或者通过引用传递)到一个独立的对象(或客户端)中,然后成为了该客户端状态的一部分。以下5个核心组件用来作为依赖注入:value、constant、factory、service、provider
value和constant来设置全局变量 。service依赖注入, 利用service把需要共享的数据注入给需要的controller。
<body style="padding: 20px;" ng-app="myApp"><div ng-controller="myCtrl"> <input ng-model="msg"> <h3>{{content}}</h3> <h3>{{website}}</h3> <h3>{{data.fmsg}}</h3> <h3>{{uname}}</h3></div><script src="js/angular.min.js"></script></body><script> var app = angular.module('myApp', []);//AngularJS 模块定义应用: app.value('realname', 'tom') //value的值可以被修改 .constant('http', 'www.baidu.com')//constant不可修改 .factory('Data', function() { return { fmsg: '你好啊', setMsg: function() { this.fmsg = '我不好'; } } }) .service('User', function() {//service只实例化一次,任意注入service都使用同一个实例 this.firstName = "上官"; this.lastName = "飞燕"; this.getName = function() { return this.firstName + this.lastName; } }) .controller('myCtrl', function ($scope, realname, http, Data, User) {//AngularJS 控制器控制应用: $scope.msg = "您好"; $scope.content = realname; $scope.website = http; $scope.data = Data;// Data.setMsg(); $scope.uname = User.getName(); });</script></html>
全部代码地址:http://download.csdn.net/detail/mqy1023/9535921
参考链接:
1、http://www.runoob.com/angularjs/angularjs-tutorial.html
2、《AngularJs》:http://www.imooc.com/learn/156
3、AngularJs视频:http://www.jikexueyuan.com/course/angularjs/
- 【AngularJs】--入门实例
- 【angularJs】--入门实例二
- AngularJs入门实例
- AngularJS入门小实例
- 跟我学AngularJs:AngularJs入门及第一个实例
- AngularJS入门的一个web开发实例
- angularJS 实例
- AngularJS入门实例1——绑定输入框
- AngularJS入门实例2——控制器的使用
- AngularJS入门
- AngularJS入门
- AngularJS 入门
- AngularJS入门
- AngularJs入门
- AngularJS入门
- AngularJS入门
- AngularJs入门
- AngularJS入门
- Acticity的四种启动模式解析
- Java代码判断字符串是否为汉字
- 多屏幕显示
- eclipse相关资源
- 【java并发】ThreadLocal类以及应用技巧
- AngularJs入门实例
- java基本语法之基本数据类型详解
- spark实现uv统计(使用内置函数)
- HDU1205 鸽巢原理/找规律
- C++中cin的详细用法
- 中兴部分手机BLE不能带参数扫描
- 菜鸟写给菜鸟的 ——LeetCode解题笔记 Easy-题目2:258. Add Digits
- [JZOJ3401]Pty爬山/[2013年集训队论文答辩]登顶计划
- 机器学习--代码的终结者,我们很快就能像调教狗一样来调教我们的计算机