zoukankan      html  css  js  c++  java
  • angularjs学习笔记--主html&template html&module&template js、模块、控制器、双向数据绑定、过滤器

    // Register the `phoneList` component on the `phoneList` module,
    
    angular.
    
      module('phoneList').
    
      component('phoneList', {...});
    
     
    

     

     

    // Define the `phonecatApp` module
    
    angular.module('phonecatApp', [
    
      // ...which depends on the `phoneList` module
    
      'phoneList'
    
    ]);
    

     

    通过phoneList在定义phonecatApp模块时传递依赖关系数组,AngularJS将使所有注册的实体也phoneList可以使用phonecatApp。

     

    依赖注入:一种软件设计模式,用于处理组件如何保持其依赖性。Angularjs注射器子系统负责创建组件,解决其依赖性,并根据请求将其提供给其他组件。

     

    工厂方法:定义指令、服务或过滤器时使用出厂功能,工厂方法注册了模块。宣布工厂的推荐方法:

    angular.module('myModule',[]) 
    .factory('serviceId',['depService',function(depService){ 
     
    }]) 
    .directive('directiveName',['depService',function(depService){ 
     
    }]) 
    .filter('filterName',['depService',function(depService){ 
     
    }]);
    

     

     

    模块方法:通过调用config和run方法来指定在模块的配置和运行时

     

     

    controller:

    (1)
    
    someModule.controller('MyController',['$scope','dep1','dep2',function($scope,dep1,dep2){
        $scope.aMethod = function(){
    
        }
    }])
    
     
    
    (2)
    <div ng-controller="MyController"> 
        <button ng-click="sayHello()"></button> 
    </div> 
     
    function MyController($scope,greeter){ 
        $scope.sayHello = function(){ 
            greeter.greet('hello world'); 
        }; 
    }
    
     
    

     

     

    主html文件(index1.html)、template模板html文件(phone-list.template.html)、module文件(app.module.js)、模板html文件对应的js文件(phone-list.component.js)之间的相互关系:

    index1.html用于查看界面效果,也可引入定义的组件;phone-list.template.html定义模板的界面及渲染情况;app.module.js用于利用angularjs定义模块;phone-list.component.js用于模板html文件对应的数据模型及组件定义,在相应的模板下定义组件。

     

    index1.html文件:

    <!DOCTYPE html> 
    <html lang="en" ng-app="phonecatApp"> 
    <head> 
        <meta charset="UTF-8"> 
        <title>Title</title> 
        <script src="../angular/angular.js"></script> 
        <script src="../scripts/app.module.js"></script> 
        <script src="phone-list/phone-list.component.js"></script> 
        <!--<script src="../scripts/component1.js"></script>--> 
    </head> 
    <body> 
       <phone-list></phone-list> 
    </body> 
    </html>
    

     

    Ps:这里直接引用phone-list.component.js中定义的组件,别忘了对应依赖的文件。组件引入时以phone-list命名法引入。

     

    phone-list.template.html模板文件:

    <div class="container-fluid"> 
        <div class="row"> 
            <div class="col-md-2"> 
                <!--Sidebar content--> 
                <p> 
                    Search: <input ng-model="$ctrl.query" /> 
                </p> 
                <p> 
                    Sort by: 
                    <select ng-model="$ctrl.orderProp"> 
                        <option value="name">Alphabetical</option> 
                        <option value="age">Newest</option> 
                    </select> 
                </p> 
            </div> 
            <div class="col-md-10"> 
                <ul class="phones"> 
                    <li ng-repeat="phone in $ctrl.phones | filter:$ctrl.query |orderBy:$ctrl.orderProp"> 
                        <span>{{phone.name}}</span> 
                        <p>{{phone.snippet}}</p> 
                        <p>{{phone.age}}</p> 
                    </li> 
                </ul> 
            </div> 
        </div> 
    </div>
    

     

    Ps:这里是index1文件通过该模板html文件显示的内容。$ctrl是组件的别名。filter是过滤器。可以选择通过name或age属性进行排序。也可以通过name或age属性进行对应查找。

     

    app.module.js定义模块文件:

    //用来引入需要使用的module文件 
    //定义一个phonecatAPP模块 
    var phonecatApp = angular.module('phonecatApp', []);
    

     

    Ps:该文件用于定义或引用各种模块。

     

    phone-list.component.js模型文件:

    angular.module('phonecatApp',[]).component('phoneList',{ 
        templateUrl:'phone-list/phone-list.template.html', 
        controller:function phoneListController(){ 
            this.phones = [ 
                { 
                    name:'Nmas', 
                    snippet:'dsaksn dsj saj jsas ds', 
                    age:1 
                }, 
                { 
                    name:'Dmas', 
                    snippet:'saddsaksn dsj saj jsas ds', 
                    age:2 
                }, 
                { 
                    name:'Amas', 
                    snippet:'fredsaksn dsj saj jsas ds', 
                    age:3 
                } 
            ]; 
            this.orderProp = 'age'; 
        } 
    });
    

     

    ps:该文件用于定义组件,其templateUrl为对应的模板html文件,其控制器controller定义了对应的数据模型,控制其数据结构。这里的phonecatApp为app.module.js中定义的模块,即在该模块下注册组件phoneList。

     

     

    Angularjs过滤器:使用一个管道字符(|)添加到表达式和指令中,可用于转换数据。过滤器有:currency(格式化数字为货币格式)、filter(从数组项中选择一个子集)、lowercase(格式化字符串为小写)、orderBy(根据某个表达式排列数组)、uppercase(格式化字符串为大写)

     

    <p>姓名为 {{ lastName | uppercase }}</p>

     

    <!DOCTYPE html> 
    <html> 
    <head> 
        <meta charset="utf-8"> 
        <script src="../angular/angular.js"></script> 
    </head> 
    <body> 
    <div ng-app="myApp" ng-controller="costCtrl"> 
        数量: <input type="number" ng-model="quantity"> 
        价格: <input type="number" ng-model="price">    
        <!--双向数据绑定--> 
        <p>总价 = {{ (quantity * price) | currency }}</p> 
        <!--实现quantity与price的乘积,并利用currency进行格式化,成货币形式--> 
    </div> 
    <script> 
        var app = angular.module('myApp', []);//定义名为myApp的模块 
        app.controller('costCtrl', function($scope) {   //在该模块下定义一个控制器costCtrl,通过构造函数实现 
            $scope.quantity = 1;   //初始化quantity 
            $scope.price = 9.99;   //初始化price 
        }); 
    </script> 
    </body> 
    </html>
    

     

    <!DOCTYPE html> 
    <html> 
    <head> 
        <meta charset="utf-8"> 
        <!--<script src="https://cdn.bootcss.com/angular.js/1.4.6/angular.min.js"></script>--> 
        <script src="../angular/angular.js"></script> 
    </head> 
    <body> 
    <div ng-app="myApp" ng-controller="namesCtrl"> 
        <p>输入过滤内容:</p> 
        <p><input type="text" ng-model="test"></p> 
        <ul> 
            <li ng-repeat="x in names | filter:test | orderBy:'country'"> 
                {{ (x.name | uppercase) + ', ' + x.country }} 
            </li> 
        </ul> 
    </div> 
    <script>
    //利用angular定义名为myApp的模块,并在该模块下定义名为namesCtrl的控制器,通过构造函数实现该控制器,控制器内定义了数据模型,该数据模型为数组形式,其内包含多个对象 
        angular.module('myApp', []).controller('namesCtrl', function($scope) { 
            $scope.names = [ 
                {name:'Jani',country:'Norway'}, 
                {name:'Hege',country:'Sweden'}, 
                {name:'Kai',country:'Denmark'} 
            ]; 
        }); 
    </script> 
    </body> 
    </html>
    

     

    自定义过滤器:

    <!DOCTYPE html> 
    <html> 
    <meta charset="utf-8"> 
    <script src="https://cdn.bootcss.com/angular.js/1.4.6/angular.min.js"></script> 
    <body> 
    <div ng-app="myApp" ng-controller="myCtrl"> 
        姓名: {{ msg | reverse }} 
    </div> 
     
    <script> 
        var app = angular.module('myApp', []); 
        app.controller('myCtrl', function($scope) { 
            $scope.msg = "Runoob"; 
        }); 
        app.filter('reverse', function() { //可以注入依赖 
            return function(text) { 
                return text.split("").reverse().join(""); 
            } 
        }); 
    </script> 
    </body> 
    </html>
    

     

     ps:如有不妥之处,欢迎指出  (2017-8-16)

     

    参考 & 感谢 https://docs.angularjs.org/tutorial

    感谢小伙伴们的指导

                           

     

     

     

     

     

    宝剑锋从磨砺出,梅花香自苦寒来。
  • 相关阅读:
    jmeter如何连接数据库
    jmeter基础之录制篇
    php解压缩
    composer基本使用
    react组件之间的参数传递
    解决VMware Workstation 不可恢复错误: (vcpu-0)
    虚拟机vmware11装Mac ox 10.8 解决windows8.1下unlocker202 vmxsmc.exe已停止工作的问题
    Photoshop学习:打开PS之前需要...
    汇编语言之启航
    Markdown语法介绍
  • 原文地址:https://www.cnblogs.com/haimengqingyuan/p/7384592.html
Copyright © 2011-2022 走看看