AngularJS

Posted 海盗屋

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AngularJS相关的知识,希望对你有一定的参考价值。

前端js插件,用于开发单一页面应用程序,诞生于2009年,后来被google收购
特性:MVC、模块系统、指令系统、依赖注入、双向数据绑定
 
Angular指令:
Ng-app 注册angular程序 声明区域内使用angular语法 标记范围越小越好
Ng-model 双向绑定,绑定了表单元素到scope变量中,如果没有则会创建它。
{{变量名}}  输出变量内容 {{name}} 使用这种方式屏幕会闪烁 先显示出代码
Ng-bind   单向绑定,绑定到普通元素中 输出变量内容 <p ng-bind=“name”></p> 
Ng-init     定义初始值
{{表达式}}  可以再{{中编写表达式}} {{5+5}} {{first+””+”last}} 
<div ng-app ng-init="name=‘david‘">
    <input ng-model="name"/>
    {{name}}
    <p ng-bind="name"></p>
    {{5+5}}
</div>
Ng-controller 定义一个控制器
module  模块 参数1 app名字  参数2  所依赖的模块 返回创建的模块对象
var app = angular.module("myApp", []);
    app.controller("myclr",function($scope) {
        $scope.first = 2;
    })
方式2: 为了解决压缩时会压缩$scope为$s
var app = angular.module(‘myApp’,[‘$scope’,function($s){ //不怕压缩
  
}]);
 
$scope 传递数据 从内向外找
Ng-click  angular点击事件
<button ng-click="sayHi()">sayHi</button>
$scope.sayHi=function() {
                $scope.writeString = ‘Hello,I\‘m‘ + $scope.name + ".";
            }
$rootscope 可用作于整个应用中,是各个controller和$scope的桥梁,使用$rootscope定义的值 可以在各个controller中使用。
app.controller("myCTL", function ($scope, $rootScope) {
            $scope.names = ["Emil", "Tobias", "Linus"];
            $rootScope.ok = "ok";
});
 
可以安装一些插件来实时监控$scope当前的值
Ng-cloak 遮掩angular表达式 避免表达式先显示出来 再进行运算的尴尬效果
  需要手动添加样式 先隐藏 执行后显示 [ng-cloak] {displaynone;}
Ng-xxx是不标准的属性 可以写为data-ng-xxx 让他对html5有效
 
ng-bind-html 可以输出html代码 依赖ngSanitize指令
angular-sanitize.js
由于{{}} 和ng-bind 方式输出html时会导致转义 输出源码 所以才需要这个模块
引入改js文件后 在定义模块时 依赖一下 页面使用ng-bind-html绑定
<p ng-bind-html="name"></p>
 var app = angular.module("myapp", [‘ngSanitize‘]);
ng-repeat 循环输出 
track by 如果有重复值 track by 一下唯一值$index 位置必须在表达式最后
<li ng-repeat="x in names">
                {{x.firstname + "country:" + x.country}}
</li>
内置$index 0..leng-1 $first $last $even $odd 等函数
 
ng-class 判断是否符合表达式的值
ng-class="{red:x.startsWith(‘J‘)}"
ng-class-even ng-class-odd 设置遍历时基偶样式
 
ng-hide 符合条件隐藏
ng-show 符合条件显示  ng-show=“hour > 12"
ng-if 符合条件显示 <div ng-if="hour > 3">Hour > 3</div>
ng-href ng-href=“{{link}}"
ng-src 避免原生src自动请求机制 ng-src=“{{imgSrc}}"
ng-switch ng-switch-when ng-switch-default 分支结构 如果等于 默认
ng-checked 单选/复选是否选中
ng-disabled 是否禁用
ng-readonly 是否只读
ng-selected 是否选中
ng-blur 失去焦点
Ng-change 发生改变
Ng-copy 拷贝完成
Ng-click 单击
Ng-dbclick 双击
Ng-focus 得到焦点
Ng-submit 表单提交
ng-options json生成select下拉项 使用时可以person.name
   <select ng-options=“person.name for person in persons"></select>
 
表单验证
novalidate 阻止html5当中自带的验证样式 如email
<form novalidate>
    <input type=“email” /> 不会再出现自带的验证 红框
</form>
requied 验证不可为空 为空时返回true
Ng-minlength 验证最小值 
ng-maxlength 验证最大值
ng-pattern 验证正则表达式
    <input type=text required ng-minlength=“5” ng-pattern=”/%{a-zA-Z}$/"/>
$valid 验证通过返回true否则返回false
$invalid 验证失败返回true 否则返回false
$pristine 没有发生改变 true 修改过false
$dirty 修改过返回true 没修改过返回false
$error 
对应的css
.ng-valid{对应的css} $valid
.ng-invalid{} $invalid
.pristine{}
.ng-dirty{}
<form name=“myForm”>
    <input type=“email” name=“name" ng-model=“text” />
    {{ myForm.name.$valid }}
</form>
 
 
angular工具方法
angular.bind(document,funcName,param1)();  //修改this指向 funcName方法的this就是document了
angular.copy(a,b); // a拷贝到b 完全拷贝
angular.extend(b,a); //把a赋值给b 继承操作 b同时拥有a
angular.isArray(); //判断是否为数组
Angular.jsDate(); //是否日期
angular.isDefined(); //是否存在
angular.isUndefined(); //
angular.isFunction(); //是否为函数
Angular.isNumber();//是否数字
angular.isObject(); //是否对象
angular.isString();//是否字符串
angular.isElement(); //是否为元素
angular.version() //当前版本
angular.equals(a,b); //判断两个元素是否相等
angular.forEach(values,function(value,i){//遍历
    Value 每一个值 I 索引
}); 
angular.fromJson(str); 字符串->json对象
angular.toJson(obj) json对象->字符串
angular.module(‘myapp’,[]); //创建模块
 
angular自定义指令:
//定义指令 驼峰命令法
app.directive(’smartDirective’,function(){
    return { 
        //template:’模板’,
        restrict:’EACM’, //就全都包含了
        replace:true, //是否替换
        templateUrl:’temp.html’ //外部页面
        Scope:true //独立作用域
 }
}); 
//调用时
<smart-directive></smart-directive>
 
隔离作用域
app.directive(‘xx’,function(){
    Scope:[], //隔离 获取name时只取1值
    Controller:[‘$scope,function($scope){
        $scope.name=‘1’;
    });
});
 
restrict E元素使用 A属性使用 C类名使用 M注释使用
 
angular工具方法
angular.bind(document,funcName,param1)();  //修改this指向 funcName方法的this就是document了
angular.copy(a,b); // a拷贝到b 完全拷贝
angular.extend(b,a); //把a赋值给b 继承操作 b同时拥有a
angular.isArray(); //判断是否为数组
Angular.jsDate(); //是否日期
angular.isDefined(); //是否存在
angular.isUndefined(); //
angular.isFunction(); //是否为函数
Angular.isNumber();//是否数字
angular.isObject(); //是否对象
angular.isString();//是否字符串
angular.isElement(); //是否为元素
angular.version() //当前版本
angular.equals(a,b); //判断两个元素是否相等
angular.forEach(values,function(value,i){//遍历
    Value 每一个值 I 索引
}); 
angular.fromJson(str); 字符串->json对象
angular.toJson(obj); json对象->字符串
angular.lowercase(); 
angular.uppercase();
angular.element(“#id").css(“background”,”red”); //类似jquery操作dom addClass data eq find hasClass append attr等等
 
 
 
angular过滤器:
{{ “lalala” | upperase }} //转换为大写
{{ “DSDSS” | lowercase }} //转换为小写
{{ 14913434134 | date:”yyyy-MM-dd HH:mm:ss " }} //格式化时间
{{ 12312.2323 | number:2 }} //保留小数
{{ 13323 | currency }} //货币显示 $13323.00
{{ 13323 | currency “¥”}} ¥13233.00
{{ [{‘name‘:’dd’},{‘name‘:’david’}] | filter : {’name’:’david‘} }} //过滤
{{ “123123” | limitTo :6 }} //从前面开始取6位
{{ “dfsfasdf” | limitTo: -4 }} //从后面开始取4位
{{ | order by ‘id’ : true }} //倒序排序
{{ | order by ‘id’ }} //升序排序
{ | json }} 转换为json格式
 
在js中使用过滤器 将$filter 注入到控制器中
$filter(‘uppercase’)(‘hello’)  $filter(‘number’)(‘12312.123’,3) //保留3位小数
 
自定义过滤器
Var app = angular.module(‘myapp’,function (){
    app.filter(‘filterName‘,function(str,num){
        console.log(num);
        Return str.chatAt(0).toUppercase()+str.substring(1);
    });
});
{{ name | filterName : 2 }}
 
angular服务:
$scope.$watch 监控元素 当监控的值发生变化时触发函数
 app.controller("mycontrol",function($scope) {
        $scope.$watch("userName",function(now,old) {
            console.log("now:" + now);
            console.log("old:" + old);
        });
    });
 
$scope.$apply //在原生js中监听数据是否有变化
 
$timeout //多少毫秒后执行
$timeout(function(){
    $scope.name=‘2秒后执行‘
},2000);
$timeout.cancel() //取消及时 重新计时
 
$interval  每过多少毫秒执行一次
 
$location 
  • absUrl( ):只读;返回url,带有所有的片段。
  • hash( ):读、写;当带有参数时,返回哈希碎片;当在带有参数的情况下,改变哈希碎片时,返回$location。
  • host( ):只读;返回url中的主机路径。
  • path( ):读、写;当没有任何参数时,返回当前url的路径;当带有参数时,改变路径,并返回$location。(返回的路径永远会带有/)
  • port( ):只读;返回当前路径的端口号。
  • protocol( ):只读;返回当前url的协议。
  • replace( ):如果被调用,就会用改变后的URL直接替换浏览器中的历史记录,而不是在历史记录中新建一条信息,这样可以阻止『后退』。
  • search( ):读、写;当不带参数调用的时候,以对象形式返回当前url的搜索部分。
  • url( ):读、写;当不带参数时,返回url;当带有参数时,返回$location。
  • $locationChangeStart:在URL改变前发生。这种改变可以通过调用事件的preventDefault方法为阻止。
  • $locationChangeSuccess:当URL改变后发生。
 
$anchorScroll 锚点跳转
 
$cacheFactory 
    info() //查看缓存信息
    put() //添加缓存
    get() //获取缓存
    remove() //删除
    var cache = $cacheFactory(‘myCache’,{capacity:2} //可以限制长度
 
$log 等同console.log()
      
$interpolate 插值服务
    文本框中输入 {{name}} 表达式等页面执行
 
$http get post请求
angular.module(‘myapp’,[]).controller(‘myctl’,[‘$scope’,’$http’,function($scope,$http){
    $http({
        method:’get’, //JSONP,POST
        url:’xxx.php
    }).success(function(data,state,headers,config){
        //成功回调
    }).error(function(data){
        //失败
    });
 
    //简写
    $http.get(‘url’).success(function(){});
});
 
 
自定义服务
//provider
app.provider(‘myService’,function(){
    return {
        $get:function(){
            return {
                name:’david’,
                sayHi:function(){
                    return this.name + “ hi “;
                }
            }
        }
    }
})
 
//内部会调用provider 简写
app.factory(‘Data’,function(){ return {msg:’来自factory’}});
.controller(function($scope,Data){});
 
angular路由:
//安装
npm install angular-route —save 
//引入 依赖
var app = angular.module(‘myapp’,[’ngRoute’]);
//配置路由规则
app.config([‘routeProvider’,function($routeProvider){
    $routeProvider.when(‘/a’,{templateUrl:‘‘})
    .when(‘/b’,{template:‘‘})
    .when(‘/c’,{})
    .otherwise({redirecTo:’/a’}) //defualt
}]);
<a href=‘#a’ >a</a>
<a ng-click=“$location.path(‘a’)”>a</a>
 
ngAnimate 动画效果
 
 
 

以上是关于AngularJS的主要内容,如果未能解决你的问题,请参考以下文章

AngularJs

day4

ASP.NET MVC和EF集成AngularJS开发

web前端技术分享:常用JavaScript框架有哪些?