Angular js特性

作者: 50153465fcd8 | 来源:发表于2017-02-26 21:56 被阅读45次

    一、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",
    })
    })

    相关文章

      网友评论

        本文标题:Angular js特性

        本文链接:https://www.haomeiwen.com/subject/xbrawttx.html