zoukankan      html  css  js  c++  java
  • 第一次用AngularJS

    1.创建指令的4种方式(ECMA)

    var appModule = angular.module('app', []);
    appModule.directive('hello', function(){
        return {
            /**
             * E 元素
             * C class
             * M 注释 directive:hello
             * A 属性 默认
             */
            restrict: 'ECMA',
            template: '<div>hello world.</div>',
            replace: true
        };
    });

    2.指令的多种调用方式

    <!-- 定义指令,匹配过程(去掉'x-'、'data-'、转化':', ',' , '-', '_-'为驼峰式) -->
    
    <my-hello></my-hello>
    <div my-hello></div>
    <!-- directive:my-hello -->
    <div class="my-hello"></div>
    <my:hello></my:hello>
    <my_hello></my_hello>
    <data-my-hello></data-my-hello>
    <x-my-hello></x-my-hello>

    3.service 与 controller、directive交互

    <button add-book-button>Add book</button>
    
    <ul ng-controller="books.list">
        <li ng-repeat="i in books">书名:{{i.title}},作者:{{i.author}}</li>
    </ul>
    var appModule = angular.module('app', []);
    
        // service 单例,共享数据
        appModule.service('Book', ['$rootScope', function($root){
    
            var service = {
                books: [
                    {
                        "title": "书名1",
                        "author": "作者1"
                    },
                    {
                        "title": "书名2",
                        "author": "作者2"
                    }
                ],
                addBook: function(book){
                    service.books.push(book);
    
                    // 给root下所有的books.update派发事件
                    $root.$broadcast('books.update');
                }
            };
    
            return service;
        }]);
    
        // 在控制器里使用Book服务
        appModule.controller('books.list', ['$scope', 'Book', function(scope, Book){
    
            scope.books = Book.books;
    
            scope.$on('books.update', function(){
                scope.$apply(function(){
                    scope.books = Book.books;
                });
            });
    
        }]);
    
        // 在指令里使用Book服务
        appModule.directive('addBookButton', ['Book', function(Book){
            return {
                restrict: 'A',
                link: function(scope, el){
                    var n = 0;
                    el.bind('click', function(){
                        Book.addBook({
                            "title": "新书"+(++n),
                            "author": "新作者"+n
                        });
                    });
                }
            };
        }]);

    4.controller 与 controller交互

    <!-- 控制器嵌套 -->
    <div ng-controller="Ctrl1Parent">
        <p>{{text}}</p>
        <button ng-click="changeText()">控制器嵌套Parent</button>
        <div ng-controller="Ctrl1Child">
            <p>{{text}}</p>
            <button ng-click="changeText()">控制器嵌套Child</button>
        </div>
    </div>
    
    <!-- 控制器嵌套,向上传播 -->
    <div ng-controller="Ctrl2Parent">
        <p>{{text}}</p>
        <div ng-controller="Ctrl2Child">
            <button ng-click="changeText()">向上传播</button>
        </div>
    </div>
    
    <!-- 控制器嵌套,向下传播 -->
    <div ng-controller="Ctrl3Parent">
        <button ng-click="changeText()">向下传播</button>
        <div ng-controller="Ctrl3Child">
            <p>{{text}}</p>
        </div>
    </div>
    
    <!-- 控制器嵌套,兄弟传播 -->
    <div ng-controller="Ctrl4Parent">
        <div ng-controller="Ctrl4Child">
            <p>{{text}}</p>
            <button ng-click="changeText()">兄弟传播</button>
        </div>
        <div ng-controller="Ctrl4Child">
            <p>{{text}}</p>
            <button ng-click="changeText()">兄弟传播</button>
        </div>
    </div>
    
    <!-- 服务 -->
    <div ng-controller="Ctrl5Main">
        <input type="text" ng-model="test" />
        <div ng-click="add()">add</div>
    </div>
    <div ng-controller="Ctrl5Side">
        <div ng-click="get()">get {{name}}</div>
    </div>
    var appModule = angular.module('app', []);
    
        // 控制器与控制器交互 -> 控制器嵌套
        appModule.controller('Ctrl1Parent', ['$scope', function(scope){
            scope.text = 'hello';
            scope.changeText = function(){
                scope.text = 'parent';
            };
        }]);
        appModule.controller('Ctrl1Child', ['$scope', function(scope){
            scope.changeText = function(){
                scope.text = 'child';
            };
        }]);
    
        /**
         * $on          绑定事件
         * $emit        向上传递事件(冒泡)
         * $boardcast   向下传递事件(捕获)
         */
        // 控制器与控制器交互 -> 事件传播(控制器嵌套,向上传播)
        appModule.controller('Ctrl2Parent', ['$scope', function(scope){
            scope.text = 'parent';
            scope.$on('changeText', function(ev, text){
                scope.text = text;
            });
        }]);
        appModule.controller('Ctrl2Child', ['$scope', function(scope){
            scope.changeText = function(){
                scope.$emit('changeText', 'child');
            };
        }]);
    
    
        // 控制器与控制器交互 -> 事件传播(控制器嵌套,向下传播)
        appModule.controller('Ctrl3Parent', ['$scope', function(scope){
            scope.text = 'parent';
            scope.changeText = function(){
                scope.$broadcast('changeText', 'child');
            };
        }]);
        appModule.controller('Ctrl3Child', ['$scope', function(scope){
            scope.$on('changeText', function(ev, text){
                scope.text = text;
            });
        }]);
    
    
        // 控制器与控制器交互 -> 事件传播(同级传播)
        appModule.controller('Ctrl4Parent', ['$scope', function(scope){
            // 绑定一个changeTextAll事件,它被触发时会向子作用域发布changeTextExe
            scope.$on('changeTextAll', function(){
                scope.$broadcast('changeTextExe');
            });
        }]);
        appModule.controller('Ctrl4Child', ['$scope', function(scope){
            scope.text = 'parent';
    
            // 触发父控制器的changeTextAll事件,得到changeTextExe
            scope.changeText = function(){
                scope.$emit('changeTextAll');
            };
    
            // changeTextExe发生
            scope.$on('changeTextExe', function(){
                scope.text = 'changeTextExe';
            });
        }]);
    
        // 以服务的方式交互
        appModule.factory('instance', function(){
            return {};
        });
        appModule.controller('Ctrl5Main', function($scope, instance){
            $scope.add = function() {
                instance.name = $scope.test;
            };
        });
        appModule.controller('Ctrl5Side', function($scope, instance){
            $scope.get = function() {
                $scope.name = instance.name;
            };
        });
  • 相关阅读:
    编码问题:python写入文件
    [ExtJS5学习笔记]第三十二节 sencha extjs 5与struts2的ajax交互配置
    PS 滤镜——Skewing
    [struts2学习笔记] 第六节 struts2依赖的jar包还有Could not find action or result 错误解决
    [linux RedHat]windows下使用putty远程连接linux 下载JDK和tomcat
    一个有趣的花环图案生成函数
    【翻译】针对多种设备定制Ext JS 5应用程序
    【翻译】Ext JS最新技巧——2015-1-2
    [ExtJS5学习笔记]第三十一节 sencha extjs 5使用cmd生成的工程部署到tomcat服务器
    PhotoShop 图像处理 算法 汇总
  • 原文地址:https://www.cnblogs.com/jununx/p/4472898.html
Copyright © 2011-2022 走看看