AngularJS

2021-02-20  本文已影响0人  欢欣的膜笛

AngularJS 是什么

AngularJS模块(使用angular.module()方法来声明模块)

实现模型-视图的双向绑定

    <input type="text" ng-model="msg"> 
    <!-- 视图——>模型 -->

    <h1 ng-bind="msg"></h1>
    <!-- 模型——>视图 -->

    <h1>{{msg}}</h1>
    <!-- 模型——>视图 -->

引入第三方路由模块 ngRoute 配置路由实现单页面开发

    //配置路由
    var Yike = angular.module('Yike',['ngRoute','Controllers']);
    Yike.config(['$routeProvider',function($routeProvider){
        $routeProvider.when('/today',{
            //今日一刻
            templateUrl:'./views/today.html',
            controller:'TodayCtrl'
        }).when('/settings',{
            //设置
            templateUrl:'./views/settings.html',
            controller:'SettingsCtrl'
        }).otherwise({
            redirectTo:'/today'
        });
    }]);

理解MVC、MVVM开发模式

使用directive自定义指令、验证表单字段

    app.directive('tag',function(){
        return {
            //指令调用方式:E:element,C:class,M:mark,A:attribute
            restrict:"ECMA",
            //为true时M显示,不写或为false不显示。是否替换原始标签
            replace:true,
            //指令内容
            template:'<h1>你好 angular</h1>',
            //加载外部文件,需通过服务器访问
            //templateUrl:'./header.html'
        }
    });
    <form name="myForm">
        <div class="form-group">
            <label for="">User name:</label>
            <input type="text" class="form-control" name="userName" ensure-unique="username" ng-model="user.name" required>
            <span class="error" ng-show="myForm.userName.$error.unique">Required!</span>
        </div>
        <div class="form-group">
            <label for="">Last name:</label>
            <input type="text" class="form-control" name="lastName" ng-model="user.last" ng-minlength="3" ng-maxlength="10">
            <span class="error" ng-show="myForm.lastName.$error.minlength">Too short!</span>
            <span class="error" ng-show="myForm.lastName.$error.maxlength">Too long!</span>
        </div>
        <div class="form-group">
            <label for="">User age:</label>
            <input type="text" class="form-control" name="userAge" ng-model="user.age" even required>
            <span class="error" ng-show="myForm.userAge.$error.even">数字必须是偶数</span>
        </div>
    </form>
    angular.module('MyApp', [])
    .controller('ExampleController', ['$scope', function ($scope) {}])
    .directive('even',function(){
        return {
            restrict:"A",
            require:"ngModel",
            link:function(scope,ele,attrs,ngModelController){
                //$parsers的值是一个由函数组成的数组,其中的函数会以流水线的形式被逐一调用。ngModel从DOM中读取的值会被传入$parsers中的函数,并依次被其中的解析器处理。
                ngModelController.$parsers.push(function(viewValue){
                    if(viewValue % 2 === 0){
                        //通过$setValidity()函数设置表单的合法性
                        ngModelController.$setValidity('even',true);
                    }else{
                        ngModelController.$setValidity('even',false);
                    }
                    return viewValue;
                });
            }
        }
    })
    .directive('ensureUnique', ['$http','$timeout','$window',function($http,$timeout,$window) {
        return {
            restrict:"A",
            require: 'ngModel',
            link: function(scope, ele, attrs, ngModelController) {
                scope.$watch(attrs.ngModel, function(n) {
                    if (!n) return;
                    $timeout.cancel($window.timer);
                    $window.timer = $timeout(function(){
                        $http({
                            method: 'get',
                            url: '/api/checkusername/', //根据换成自己的url
                            params:{
                                "username":n
                            }
                        }).success(function(data) {
                            //这个取决于你返回的,其实就是返回一个是否正确的字段,具体的这块可以自己修改根据自己的项目
                            ngModelController.$setValidity('unique', data.isUnique);
                        }).error(function(data) {
                            ngModelController.$setValidity('unique', false);
                        });
                    },500);
                });
            }
        };
    }]);

自定义指令参数

广播

使用$httpProvider对请求进行拦截实现权限管理

    //创建拦截器,可以在服务中添加一种或多种拦截器
    angular.module('myApp', []).factory('myInterceptor', function($q) {
        var interceptor = {
            //请求拦截器进行调用。它可以对设置对象进行修改
            'request': function(config) {
                // 成功的请求方法
                return config; // 或者 $q.when(config);
            },
            //对响应拦截器进行调用。它可以对响应进行修改
            'response': function(response) {
                // 响应成功
                return response; // 或者 $q.when(config);
            },
            //在上一个请求拦截器抛出错误时调用此拦截器
            'requestError': function(rejection) {
                // 请求发生了错误,如果能从错误中恢复,可以返回一个新的请求或promise
                return rejection; // 或新的promise
                // 或者,可以通过返回一个rejection来阻止下一步
                // return $q.reject(rejection);
            },
            //在上一个响应拦截器抛出错误时调用此拦截器
            'responseError': function(rejection) {
                // 请求发生了错误,如果能从错误中恢复,可以返回一个新的响应或promise
                return rejection; // 或新的promise
                // 或者,可以通过返回一个rejection来阻止下一步
                // return $q.reject(rejection);
            }
        };
        return interceptor;
    });
    //将实现的拦截器加入到$httpProvider.interceptors数组中,一般在config方法中进行
    myApp.config(['$httpProvider',function($httpProvider) {
        $httpProvider.interceptors.push(myInterceptor);
    }]);

使用angular-translate实现国际化

    shim: {
        angular_translate:{
          deps: ['angular'],
          exports: 'angular_translate'
        }
    }
    <div>
        <h1>{{ 'TITLE' | translate }}</h1>  //以过滤器的方式使用
        <span translate="FOO"></span>  //指令的方式使用
    </div>
    var app = angular.module("MyApp",['pascalprecht.translate']);
    app.config(['$translateProvider',function($translateProvider){
        //添加翻译表格
        $translateProvider.translations('en',{
            'TITLE':'Hello',
            'FOO':'This is a paragraph'
        });
        $translateProvider.translations('zh',{
            'TITLE':'你好',
            'FOO':'这是一幅图'
        });
        //设置首选语言
        $translateProvider.preferredLanguage('zh');
    }]);
    app.controller('TranslateController', ['$translate','$scope',function($translate, $scope) {
        $scope.changeLanguage = function(langKey) {
            $translate.use(langKey);
        }
    }]);
    <div ng-controller="TranslateController">
        <button ng-click="changeLanguage('de')" translate="TITLE"></button>
        <button ng-click="changeLanguage('en')" translate="FOO"></button>
    </div>
上一篇下一篇

猜你喜欢

热点阅读