Angular js特性

一、Angular四大特性之一---MVC

  1. 声明一个ng的应用程序 ng-App

     <html ng-app></html>
    
  2. 创建一个自定义的模块:angular.module("模块名",[依赖列表])

      angular.module.("模块名",["ng"])
    
  3. 在应用中注册自定义模块 ng-app="模块名"

     <html ng-app="myModule"></html>
    
  4. 在模块中声明Controller

       angular.module.("模块名",["ng"]).controller("myContro",function(){
       }); 
    
  5. 在view中指定Controller对象的作用范围-调用控制器创建函数

     <div ng-controller="myContro">
        {{name}}
     </div>
    
  6. 在Controller中声明Modal数据

      angular.module.("模块名",["ng"]).controller("myContro",function($scope){
    
          #$scope.name = "蓝科教育";
    
       });
    

注意:

Angular明明命名空间,&和&&为防止和你的代码的名称产生冲突 ng公共对象的前缀名使用$ 私有对象名使用$$ 请不要在你的对象中使用这两个符号
举例:

  <!DOCTYPE html>
    <html>
      <head>
        <meta charset="UTF-8">
        <title></title>
        <link rel="stylesheet" type="text/css" href="css/bootstrap.css"/>
      </head>
      <body ng-app="myModule">
        <!--angular module controller model-->
        <div ng-controller="myControl">
          <ul>
            <li ng-repeat="name in personArray">{{name}}</li>
           </ul>
        </div>
    
</body>

<script src="js/angular.js" type="text/javascript" charset="utf-8"></script>
    <script type="text/javascript">
      angular.module("myModule",["ng"]).controller("myControl",function($scope){
      $scope.personArray = ["张三","李四","王五","赵四"];
    </script>

</html>

二、AngularJS四大特性之二-双向数据绑定

1.方向1

  • Model绑定到View,此后不论何时只要Model发生改变,立即会自动同步更新
  • 实现方法 {{}} ng-bind ngif ngRepeat...几乎所有的显示数据的指令都实现了方向1的绑定

举例:

  <!DOCTYPE html>
  <html>
<head>
    <meta charset="UTF-8">
    <title></title>
    <link rel="stylesheet" type="text/css" href="css/bootstrap.css"/>
</head>
<body ng-app="myModule">
    <div ng-controller="myControl" class="container">
        <p>{{name}}{{imgsrc}}</p>
        <button ng-click="add()" class="btn btn-danger">点我</button>
        <br />
        <span class="">点击次数{{count}}</span>
    </div>
    <div ng-controller="myControl2" class="container">
        <h1>轮播图</h1>
        ![](img/{{imgsrc+'.jpg'}})
        <button ng-click="prev()" class="btn btn-danger">上一张</button>
        <button ng-click="next()" class="btn btn-success">下一张</button>
    </div>
</body>
<script src="js/angular.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
    var module = angular.module("myModule",["ng"])
    module.controller("myControl",function($scope){
        $scope.name ="gg";
        var count=0;
        $scope.count = count;
        $scope.add=function(){
            $scope.count++;
        }
    })
    module.controller("myControl2",function($scope){
        var imgsrc = 1;
        $scope.imgsrc=imgsrc;
        $scope.prev = function(){
            $scope.imgsrc--;
            if ($scope.imgsrc<1) {
                $scope.imgsrc=2;
            }
        }
        $scope.next = function(){
            $scope.imgsrc++;
            if ($scope.imgsrc>2) {
                $scope.imgsrc=1;
            }
        }
    })
</script>
</html>

2.方向2

  • view绑定到model,把视图中可以修改的HTML元素,即表单控件的值绑定到模型变量上。此后,只要用户修改了表单控件的值后,后台模型变量的值会立即随之改变

  • 实现: 只有ngmodel指令可以,为了监视到Model变量真的被改变了可以使用$scope.$watch()函数对Model数据的值进行监视,

    $scope.$watch('name',function(newValue,oldValue, scope){
    
      console.log(newValue);
    
      console.log(oldValue);
    
    });
    

单行文本输入域,ngModel可以把value属性值绑定到model
复选框,ngModely可以把true、false值绑定到Model变量
单选框 ngModel可以把当前选中的单选框的value值绑定到Model变量
下拉框 ngModel可以把当前选中的option的value值绑定到Model变量
举例:

  <!DOCTYPE html>
  <html>
  <head>
    <meta charset="UTF-8">
    <title></title>
    <link rel="stylesheet" type="text/css" href="css/bootstrap.css"/>
  </head>
  <body ng-app="myModule">
    <div class="container" ng-controller="myControl">
          <h1>单行文本输入框</h1>
          名字:<input type="text" ng-model="name"/>
          <span>{{name}}</span><br />
          密码:<input type="password" ng-model="password"/>
          <span>{{password}}</span>
          <br />
          <h2>复选框</h2><br />
          婚否:<input type="checkbox"  ng-model="marry"/><span>{{marry}}</span><br />
          <h2>单选框</h2><br />
          <input type="radio" value="男" ng-model="sex"/>男
          <input type="radio" value="女" ng-model="sex"/>女
          <span>{{sex}}</span><br />

          <h2>下拉框</h2>
          <select name="" ng-model="city">
              <option value="北京">北京</option>
              <option value="上海">上海</option>
              <option value="深圳">深圳</option>
              <option value="广州">广州</option>
          </select>
          <span>{{city}}</span>
          <br />

          <h2>简易版购物车计算器</h2>
          单价:<input type="text" ng-model="price" />
          数量:<input type="text" ng-model="number" />
          总价:{{price*number}}
      </div>
  </body>
  <script src="js/angular.js" type="text/javascript" charset="utf-8"></script>
  <script type="text/javascript">
    angular.module("myModule",["ng"]).controller("myControl",function  ($scope){
      $scope.$watch("name+password",function() {  //两个监听对象之间用+连接即可
          console.log($scope.name);
          console.log($scope.password);
      })
  })
  </script>
  </html>

三、ng模块中提供的Service组件

  1. $rootScope 用于在所有控制前间共享数据的服务

  2. $interval 周期性定时器服务

  3. $timeout 一次性定时器服务

四、ng模块提供的directive组件

ngClick: 为元素绑定单机事件的监听函数-只能是Model函数($scope.函数名=function(){}),不能是全局函数,可以在view中被调用

ngMouseOver 鼠标移动到指定的 HTML 元素上时要执行的操作

ngSrc 为img标签指定src属性,但可以防止404请求错误

ngShow 若赋值为true,则display:block;否则display:none

ngHide; 跟ngshow相反

五、AngularJS四大特性之三-依赖注入

1.若某个函数调用时需要其他的对象作为形参,就称此函数依赖于形参

  function Driver(car) {
    car.strat();
    car.run();
    car.stop();
  }

2.如何解决依赖关系

1)主动创建

       var c1 = new Car();
       var d1 = new Driver(c1);
  1. 被动注入(Injection)方式

    module.controller("控制器",function($scope,$inerval));

angular中的ngController指令在实例化控制器对象时,会根据指令的形参名,创建出控制器所依赖的对象,并注入进来---依赖注入(Dependency Injection)

注意:
1.angular在创建控制器对象时,会根据形参列表中的每个形参依赖的对象的名称来创建,故控制器声明函数不能声明angular无法识别的形参名 angular只提供了一种依赖注入方式-根据形参名来注入依赖的对象
2.若项目js文件使用了类似yuicompressor等压缩程序,默认会把函数的形参名精简为一个字母的形式,会导致Angular的依赖注入失败-解决办法

   module.controller("控制器名",[
    "$scope",
    "$interval",
    "$http",
    function(a,b,c){
  }
  ]);

3.可以被注入的对象 - 所有的service对象都可以被注入
1)$rootScope 在多个控制器间共享数据的服务
2)$interval 提供周期性定时器服务
3)$timeout 提供一次性定时器服务
4)$log 体用五个基本的日志输出服务
5)$http 提供异步HTPP请求(AJAX)的服务

  $http{method:"GET",url:""}.then(fun).catch(fun)

  $http.get("url").then(fn);

  $http.post("url",data).then(fn);

  6)$location

六、 ng模块中提供的过滤器

  1. filter:把model中的数据在显示时以某种特定的格式来呈现

  2. lowercase

    语法:{{表达式 | lowercase}

  3. uppercase

    语法:{{表达式 | uppercase}

  4. number

    语法:{{表达式 | number}}
    {{表达式 | number:小数位数}}

  5. currency

    {{表达式 | currency}}
    {{表达式 | currency:'货币符号'}}

  6. date

    {{表达式 | date }}
    {{表达式 | date | "yyyy-MM-dd"}}

七、总结ng模块中我们已经用到的内容

1.directive - 用在DOM元素上

   ngApp/ngbind/nginit/ngcontroller/ngmodel/

2.service - 用在控制器的声明里

    $scope/$rootScope/$timerout/$interval/$http/$location

3.filter - 把model中的数据在显示时以某种特定的格式来呈现

八、单页应用

angularjs提供的模块---ngroute

  1. 概念
  • route: 路由 通过某条线路找到目标内容

  • ngroute 模块的目标: 就是根据浏览器中url中的一个特殊的地址标记,查找到该标记所对应的模板页面,并异步加载到ngview

2.使用步骤

  1. 创建唯一完整的HTML页面,其中声明一个容器,ngview指令。引入angular.js angular-routejs

    <div ng-view></div>

2)创建多个模板页面(习惯上放在一个特别的目录下,如tpl)

  1. 创建Module,声明依赖于ng/ng-route两个模板

    var app = angular.module("module",["ng","ngRoute"]);

4)在Module中配置路由字典

  app.config(function($routeProvider){

    $routeProvider.when("/start",{
      templateUrl:xxx,
      controller:""     //此处声明的控制器可供当前目标页面所有元素使用   
    })
    })

5)使用浏览器做测试
http:IP地址/index.html#/路由地址

3.ngroute中的页面跳转

通过超链接访问 href="#/main"
通过js跳转 $location.path("/2")
举例:
html:

 <html>
  <head>
    <meta charset="utf-8">
    <title>路由</title>
    <link rel="stylesheet" type="text/css" href="css/bootstrap.css"/>
  </head>
  <body ng-app="module">
    <ul>
        <li>
            <a href="#/">page1</a>
            <a href="#page2">page2</a>
        </li>
    </ul>
    <div ng-view></div>
</body>
<script src="js/angular.js" type="text/javascript" charset="utf-8"></script>
<script src="js/angular-route.js" type="text/javascript" charset="utf-8"></script>
 <script src="js/singlePage.js" type="text/javascript" charset="utf-8"></script>
</html>

//singlePage.js文件内容

  var module = angular.module("module",["ng","ngRoute"]);

  module.config(function($routeProvider){

    $routeProvider.when("/",{
    
    templateUrl:"temp/page1.html",
    
    controller:"pageControl",
}).when("/page2",{
    
    templateUrl:"temp/page2.html",
})
})
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,117评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,963评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,897评论 0 240
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,805评论 0 203
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,208评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,535评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,797评论 2 311
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,493评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,215评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,477评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,988评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,325评论 2 252
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,971评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,055评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,807评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,544评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,455评论 2 266

推荐阅读更多精彩内容