AngularJS 1.x简单介绍及常用套路

MVC设计模式

M:model 数据模型
V:view 视图
C:controller 控制器
由控制器创建 数据 到数据模型中 然后展示到 视图中

angularJs基本套路

1.先引入angularJS包

    

2.设置angularJS的作用范围(一般写在body中)

    
        

3.创建数据模型
4.创建控制器,并绑定对应视图

    

angularJs内置指令

ng-app = “dmApp” 指定angularJS起作用的范围
ng-controller = “demoCtrl” 控制器指定的视图区域
ng-class = “{active=‘true’}” 添加类名
ng-src 路径
ng-href 超链接地址
ng-init = “name = ‘Jack’” 初始化模块,适用于简单的变量
ng-include = “文件路径” 内部使用ajax调用其他文件,实现复用
ng-readonly =“true” 文件是否只读
ng-disabled = “true” 表单是否禁用
ng-checked = “true” 单选或者复选框是否选中
ng-selected = “true” 下拉框选项是否选中
ng-show = “true” 元素是否显示
ng-hide = “true” 元素是否隐藏
ng-if = “true” 元素是否创建
ng-switch = “type” 选择语句
ng-switch-when 相当于case:
ng-model 表单元素数据的双向绑定
ng-repeat 复制元素并绑定数据到元素中
ng-click = "click()" 然后在控制器中的回调函数内,设置$scope.click = function(){}
ng-mouseover... 其他所有事件都一样,去掉on 用 ng- 开头

angularJS自定义指令


app.directive("dmTag",function(){
    return {
        restrict:"EA",//ECMA一般用EA Element、Class、Mark、Attribute
        template:“

hello

”,//模板 replace:"false",//是否替换原有标签 templateURL:"",//将另一个文件当成模板 link:function(scope,element,attrs){ //link函数有三个参数scope,指定元素,指定元素的全部属性 element.on("click",function(){ alert("你好"+attrs["hmTag"]) }) } } })

AngularJS MVC之间的作用域

AngularJS中,每一个控制器和视图之间有 $scope 作用域,作用域内数据互通
控制器之间可以嵌套包裹,子控制器可以访问父控制器的数据,但是父控制器不能访问子控制器的

过滤器filter

过滤器使用方法:{{name|filter:值}}
date:“yyyy-MM-dd HH:mm:ss“ --》日期格式 年-月-日 时:分:秒
number:3 --》小数点后几位
currency:“$”:3 --》使用什么货币单位,数值精确到小数点后几位
filter:“满足特定要求” --》满足特定条件
orderBy:true --》将数组排序,true降序,false升序
limitTo:2 --》显示数组或者对象前几位,负数从后往前算
uppercase --》转化为大写
lowercase --》转化为小写
json --》默认的过滤器,将对象转换为字符串

自定义过滤器
app.filter("firstBig",function(){
return function(data){
return data[0].toUpperCase+data.slice(1);
}
})

AngularJS的依赖注入

app.controller("demoCtrl",
["$scope","$log","$http","$timeout","$interval","$filter",
function($scope,$log,$http,$timeout,$interval,$filter){

}])
//在数组中依次往回调函数内注入对应参数,就叫做行内式依赖注入
//不写数组,直接写回调函数,直接传参,AngularJS也会猜测注入,
但是形参名必须和要注入的组件一致
//建议使用行内式

$filter过滤器的使用介绍

$filter和 filter不同。$filter作用在控制器内,而filter作用在视图中
$filter用法

    app.controller("demoCtrl,["$scope","$filter",function($scope,$filter){
    var $scope.arr = [10,20,30,40,50]
        var number = $filter("number");
        number("arr",2)
    }])

$http使用

$http AngularJS自带的ajax请求功能
$http使用方法

    app.controller("demoCtrl,["$scope","$http",function($scope,$http){
        $http({
            url:"",
            method:"post",
            data:"name=jack&age=18",//form Data 数据要用字符串形式传递
            headers:{"Content-Type","application/x-www-form-urlencoded"}
//将默认的Response PayLoad 转换为 Form Data 格式,以便后台使用$-POST 接收数据
        })then(function(response){
            console.log(response.data)
        })catch(function(){
            console.log("error message")
        })
    }])
//如果是get方法,可以不写method和headers,并且传递数据不用data,而是Parmas:{}
//如果是用jsonp跨域请求,则直接写 method:“jsonp”,就行了

由于AngularJS自带的jsonp的callback=angular.callbacks._0,而有的api接口(比如豆瓣)不支持这种格式,这个时候我们需要使用app.service自定义一个 jsonp 请求:

    //使用只执行函数(沙箱)包裹封装代码并传入angular全局变量,防止全局变量冲突
    (function(angular){
        var app = angular.module("dmApp",[]);
        app.service("myJsonp",["windows",function($windows){
            this.jsonp = function(opts){
                //1.拼接url
                var url = opts.url + "?";
                for(var key in opts.params){
                    url += (key+"="+ opts.params[key]+"&");
                }
                //2.生成随机的回调函数名
                var callbackName = "jsonp_";
                callbackName += ($windows.Math.rondom().toString().slice(2));
                url += (callback=callbackName);
                $windows[callbackName] = opts.callback;
                //3.创建script标签
                var script = $windows.document.creatElement("script");
                script.src = url;
                $windows.document.body.appendChid(script);
            }
        }])
    })(angular)

将自定义的myJsonpy给需要用到的模块进行依赖,再注入对应的控制器就能正常使用了。

AngularJS配置

app.config(["$routeProvider",function($routeProvider){
    $routeProvider.when("/demo",{
        templateUrl:"url",
        controller:"demoCtrl"
    })
}])
//在可配置组件如:$scope   后接Provider就可以对组件进行配置
//具体可配置项看文档

a锚点的介绍 与 hash值

a锚点可以点击跳转到页面指定位置,跳转时会在地址栏后增加 #id 也就是所谓的hash值,但是不会重新请求地址,利用这一点可以做单页面引用 SPA
hash值可以通过 window.location.hash获得

AngularJS路由

使用angular路由,需要先下载angular-route.js,然后通过script引入页面
想要实现单页应用,需要在a锚点上设置
新建模块,设置依赖ngRoute
var app = angular.module("dmApp",["ngRoute"])
用app.config配置 路由

    app.config(["$routeProvider",function($routeProvider){
        $routeProvider.when("/demo",{
            template:"我是代码"
        }).otherwise({
            template:"没有咯"
        })
    }])

使用路由传递与获取参数的方式

传递参数有两种:
1.QueryString类型:直接在a锚点中拼接如:

2.在匹配路由的 when 方法中 使用 when("/demo/:name"),在锚点中添加

  • hibernate使用sql查询 ctrain Hibernate
    import java.util.Iterator; import java.util.List; import java.util.Map; import org.hibernate.Hibernate; import org.hibernate.SQLQuery; import org.hibernate.Session; import org.hibernate.Transa
  • linux shell脚本中切换用户执行命令方法 daizj linuxshell命令切换用户
    经常在写shell脚本时,会碰到要以另外一个用户来执行相关命令,其方法简单记下:   1、执行单个命令:su - user -c "command" 如:下面命令是以test用户在/data目录下创建test123目录 [root@slave19 /data]# su - test -c "mkdir /data/test123" 
  • 好的代码里只要一个 return 语句 dcj3sjt126com return
    别再这样写了:public boolean foo() {    if (true) {         return true;     } else {          return false;    
  • Android动画效果学习 dcj3sjt126com android
    1、透明动画效果 方法一:代码实现 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_main, container, fals
  • linux复习笔记之bash shell (4)管道命令 eksliang linux管道命令汇总linux管道命令linux常用管道命令
    转载请出自出处: http://eksliang.iteye.com/blog/2105461     bash命令执行的完毕以后,通常这个命令都会有返回结果,怎么对这个返回的结果做一些操作呢?那就得用管道命令‘|’。     上面那段话,简单说了下管道命令的作用,那什么事管道命令呢?     答:非常的经典的一句话,记住了,何为管
  • Android系统中自定义按键的短按、双击、长按事件 gqdy365 android
    在项目中碰到这样的问题: 由于系统中的按键在底层做了重新定义或者新增了按键,此时需要在APP层对按键事件(keyevent)做分解处理,模拟Android系统做法,把keyevent分解成: 1、单击事件:就是普通key的单击; 2、双击事件:500ms内同一按键单击两次; 3、长按事件:同一按键长按超过1000ms(系统中长按事件为500ms); 4、组合按键:两个以上按键同时按住;
  • asp.net获取站点根目录下子目录的名称 hvt .netC#asp.nethovertreeWeb Forms
    使用Visual Studio建立一个.aspx文件(Web Forms),例如hovertree.aspx,在页面上加入一个ListBox代码如下: <asp:ListBox runat="server" ID="lbKeleyiFolder" />   那么在页面上显示根目录子文件夹的代码如下: string[] m_sub
  • Eclipse程序员要掌握的常用快捷键 justjavac javaeclipse快捷键ide
      判断一个人的编程水平,就看他用键盘多,还是鼠标多。用键盘一是为了输入代码(当然了,也包括注释),再有就是熟练使用快捷键。   曾有人在豆瓣评 《卓有成效的程序员》:“人有多大懒,才有多大闲”。之前我整理了一个 程序员图书列表,目的也就是通过读书,让程序员变懒。  写道 程序员作为特殊的群体,有的人可以这么懒,懒到事情都交给机器去做,而有的人又可
  • c++编程随记 lx.asymmetric C++笔记
     为了字体更好看,改变了格式……   &&运算符:   #include<iostream> using namespace std; int main(){      int a=-1,b=4,k;      k=(++a<0)&&!(b--
  • linux标准IO缓冲机制研究 音频数据 linux
    一、什么是缓存I/O(Buffered I/O)缓存I/O又被称作标准I/O,大多数文件系统默认I/O操作都是缓存I/O。在Linux的缓存I/O机制中,操作系统会将I/O的数据缓存在文件系统的页缓存(page cache)中,也就是说,数据会先被拷贝到操作系统内核的缓冲区中,然后才会从操作系统内核的缓冲区拷贝到应用程序的地址空间。1.缓存I/O有以下优点:A.缓存I/O使用了操作系统内核缓冲区,
  • 随想 生活 暗黑小菠萝 生活
    其实账户之前就申请了,但是决定要自己更新一些东西看也是最近。从毕业到现在已经一年了。没有进步是假的,但是有多大的进步可能只有我自己知道。   毕业的时候班里12个女生,真正最后做到软件开发的只要两个包括我,PS:我不是说测试不好。当时因为考研完全放弃找工作,考研失败,我想这只是我的借口。那个时候才想到为什么大学的时候不能好好的学习技术,增强自己的实战能力,以至于后来找工作比较费劲。我
  • 我认为POJO是一个错误的概念 windshome javaPOJO编程J2EE设计
                  这篇内容其实没有经过太多的深思熟虑,只是个人一时的感觉。从个人风格上来讲,我倾向简单质朴的设计开发理念;从方法论上,我更加倾向自顶向下的设计;从做事情的目标上来看,我追求质量优先,更愿意使用较为保守和稳妥的理念和方法。    &