zoukankan      html  css  js  c++  java
  • angular基础

    angular基础

      控制器(Controller)

      三个主要职责:1为应用中的模型设置初状态,2通过$scope对象把数据模型暴露给视图,3监视模型的变化,做出相应的动作。

       var app = angular.module('my',[]);  //第二个参数为依赖模型,如果没用也 必须用[ ]顶替上。
    
      app.controller('myController',['$scope',
    
             function($scope){
    
               $scope.name={
                                           name:'su'
                                };     
    
                           }
    
          ]);

      也可写成 app.controller('myController',function($scope){....})

      但是这样写在js代码压缩后,就会出错,因为函数中的形参必须是叫$scope,压缩时会把函数中的参数$scope替换成别的字符。

      ng-app

      当出现多个ng-app时,angular默认只有第一个生效。

    <body>
    <div ng-app="test1" ng-controller="show1">
        <button ng-click="show1()">one</button>    
    </div>
    <div ng-app="test2" ng-controller="show2">
        <button ng-click="show2()">two</button>
    </div>
    <script src='bower_components/angular/angular.js'></script>
    <script>
        angular.module('test1', []).controller('show1', ['$scope', function($scope){
            $scope.show1 = function(){
                console.log(11);
            }
        }])
    
        angular.module('test2', []).controller('show2', ['$scope', function($scope){
            $scope.show2 = function(){
                console.log(22);
            }
        }])
    <!-- bootstrap有引导的意思,这段代码是说,找到第二个ng-app 并告诉它用 ‘test2’模块 --> angular.bootstrap(document.querySelector(
    '[ng-app="test2"]'),['test2']); </script> </body>

      这种做法是不推荐使用的,最好一个应用就只有一个ng-app。

      下面这种做法就是推荐做法,原先是两个div,各一个ng-app,现在把这两个ng-app去掉,在他们的父元素body上加一个ng-app

    <body ng-app='test'>
        <div  ng-controller="show1">
            <button ng-click="show1()">one</button>    
        </div>
        <div  ng-controller="show2">
            <button ng-click="show2()">two</button>
        </div>    
    
    
    <script src='bower_components/angular/angular.js'></script>
    <script>
    
        angular.module('test1', []).controller('show1',['$scope',function($scope){
            $scope.show1 = function(){
                console.log(11);
            }
        }]);
    
        angular.module('test2', []).controller('show2',['$scope',function($scope){
            $scope.show2 = function(){
                console.log(222);
            }
        }]);
    
        angular.module('test', ['test1','test2']);
    </script>
    </body>

      test模块依赖test1和test2模块。

      ng-bind

    <body ng-app ng-init="age='xixi'">
        <p>{{age}}</p>
        <p ng-bind="age"></p>
    </body>

     当页面刷新时,{{age}} 会快速出现在页面,然后才被‘xixi’代替。这样子有强迫症的人看来是非常难受的,所以ng-bind就是来做这件是,先是空白,然后出现‘xixi’,ng-bind会自动转意html代码,< 转为&lt;  > 转为 &gt; 等

      ng-bind-html

      如果想使html值能正常显示,出于安全着想,需应用angular-sanitize模块,来对html值进行处理,防止跨站攻击。

    <body ng-app='myApp' ng-init="link='<a href=http://www.baidu.com>dd</a>'">
        <p ng-bind='link'></p>
        <p ng-bind-html="link"></p>
    
    <script src='bower_components/angular/angular.js'></script>
    <script src='bower_components/angular-sanitize/angular-sanitize.js'></script>
    <script>
        angular.module('myApp',['ngSanitize']);
    </script>
    </body>

      引进来的包中的模块必须成为当前模块的一个依赖才能正常使用。

      ng-repeat

      遍历数组

    <body ng-app='myApp' >
        <p ng-bind='link'></p>
        <p ng-bind-html="link"></p>
        <ul ng-controller="msg">
            <li ng-repeat="item in data" style="background:{{$odd ? '#666':'#fff'}}">{{item['num']}} {{item['name']}} {{item['age']}}</li>
        </ul>
    
    <script src='bower_components/angular/angular.js'></script>
    <script>
        angular.module('myApp',[]).controller('msg',['$scope',function($scope){
            $scope.data = [
                           {"num":1,"name":'zhansan',"age":12},
                           {"num":2,"name":'lisi',"age":12},
                           {"num":3,"name":'wagnwe',"age":12},
                           {"num":4,"name":'zhaoliu',"age":12}
                          ];
        }]);
    </script>
    </body>

      ng-class

      ng-class="{red:true}"  ,为true时表示class='red',为false则没这个类名。

    <style>
             .red{color:red;}
             .green{color:green;}
    </style>
    </head>
    <body ng-app='myApp' >
        <ul ng-controller="msg">
            <li ng-repeat="item in data" ng-class="{red:$odd,green:$even}">{{item['num']}} {{item['name']}} {{item['age']}}</li>
        </ul>
    
    <script src='bower_components/angular/angular.js'></script>
    <script>
        angular.module('myApp',[]).controller('msg',['$scope',function($scope){
            $scope.data = [
                           {"num":1,"name":'zhansan',"age":12},
                           {"num":2,"name":'lisi',"age":12},
                           {"num":3,"name":'wagnwe',"age":12},
                           {"num":4,"name":'zhaoliu',"age":12}
                          ];
        }]);
    </script>
    </body>

      ng-repeat遍历是,会给自动增加一些属性,如上例,$odd 为偶数,$even为奇数,$first 为第一个元素,$last为最后一个元素,$middle为第一和最后一个元素之间的所有元素,$index为下标值,从0开始。

      注意:当遍历的是多维数组时,即使多个元素的值完全相同,也是可以的。但是一维数组,只要相同的值,出现两次,就会报错。

     1 <body ng-app='myApp' >
     2     <ul ng-controller="msg">
     3         <li ng-repeat="item in data" ng-class="{red:$odd,green:$even}">{{item['num']}} {{item['name']}} {{item['age']}}</li>
     4     </ul>
     5 
     6     <ul ng-controller="msg">
     7         <li ng-repeat="item in students track by $index">{{item}}</li>  //加上track by $index,就可以遍历相同的值了。
     8     </ul>
     9 
    10 <script src='bower_components/angular/angular.js'></script>
    11 <script>
    12     angular.module('myApp',[]).controller('msg',['$scope',function($scope){
    13         $scope.data = [
    14                        {"num":1,"name":'zhansan',"age":12},
    15                        {"num":2,"name":'lisi',"age":12},
    16                        {"num":3,"name":'wagnwe',"age":12},
    17                        {"num":4,"name":'zhaoliu',"age":12},
    18                        {"num":4,"name":'zhaoliu',"age":12},
    19                        {"num":4,"name":'zhaoliu',"age":12}
    20                       ];
    21         $scope.students = ['张三','张三','张三'];
    22     }]);
    23 </script>
    24 </body>

      ng-class可以和表达配合,实现一些动态功能。点击下拉框的选取颜色从而改变div的颜色。

    <style>
           #box{
                width:300px;
                height:200px;
                transition:background-color 1s ease;
           }
           .red{
                 background-color:red;
           }
           .green{
                 background-color:green;
           }
           .blue{
                 background-color:blue;
           }
    </style>
    </head>
    <body ng-app>
        <select ng-model="style">
            <option value="red">红色</option>
            <option value="green">绿色</option>
            <option value="blue">蓝色</option>
        </select>
        <div id='box' ng-class="style"></div>
        <!-- <div id='box' ng-class="{red:style=='red',green:style=='green',blue:style=='blue'}"></div>   相同效果的另外一种写法-->
        <script src='bower_components/angular/angular.js'></script>
    </body>

      ng-show和ng-hide

      使元素显示和隐藏

      ng-if

      元素是否存在。

      ng-src

      <img src="{{imgSrc}}">  执行这段代码会先报个错误,然后才显示照片,因为第一次载入图片,用的是表达式当路径,当表达式解析后,第二次才能访问到图片。 ng-src 就是解决这个问题的,表达式解析好后再载入图片。

      

        

  • 相关阅读:
    C#实现-浏览器UA解析获得手机、系统、浏览器等信息
    C#代码实现-冒泡排序
    C# DateTime 工具类
    net core 3.1 跨域 Cors 找不到 “Access-Control-Allow-Origin”
    C#/.Net开发入门篇(3)——console类的输入输出
    C#/.Net开发入门篇(2)——第一个控制台应用程序
    C#/.Net开发入门篇(1)——开发工具安装
    docker 学习笔记(2)--docker file命令
    docker 学习笔记(1)--常用命令
    导出大数据方法。批量导BOM
  • 原文地址:https://www.cnblogs.com/sujianfeng/p/8699151.html
Copyright © 2011-2022 走看看