AngularJS入门知识

1,解析AngularJS表达式

     * 尽管angularjs会在运行$digest循环的过程中自动解析表达式,但是有时手动解析表达式非常有用的;
     * angularjs通过$parse这个内部服务来进行表达式的运算,这个服务能够访问当前所处的作用域。
     * 这个过程允许我们访问定义在$scope的原始js数据和函数;
     * $parse服务注入到控制器中,然后调用它就可以实现手动解析表达式
     * 如下:页面中有一个输入框绑定到了expr变量上;

html:

      <div ng-controller="MyController">
        <input type="tex" ng-model="expr" placeholder="my expression">
        <h2>{{parsedValue}}</h2>
    </div>

js:

        var app = angular.module('myApp',[]);
        app.controller('MyController',function($scope,$parse){
            $scope.$watch('expr',function(newVal,oldVal,scope){
                if(newVal !== oldVal){
                    // 用该表达式设置parseFun
                    var parseFun = $parse('expr');
                    // 获取经过解析后表达式的值
                    $scope.parsedValue = parseFun(scope);
                }
            })
        })

2, 插值字符串

        /***
         * $interpolate服务是一个可以接受三个参数的函数
         * text(字符串):一个包含字符串插值标记的字符串。
         * mustHaveExpression(布尔型),如果这个参数为true,当传入的字符串中不包含有表达式时会返回null
         * trustedContext(字符串):Angularjs会对已经进行的过的字符串插值操作的字符串通过$sec.getTrusted()方法进行严格的上下文转义;
         * $interpolate服务返回一个函数,用来在特定的上下文中运算表达式;
         *  */  
        var app = angular.module('myApp',[]);
        app.controller('MyController',function($scope,$interpolate){
            //  设置监听
            $scope.$watch('emailBody',function(body){
                if(body){
                    var template = $interpolate(body);
                    $scope.previewText = 
                        template({to:$scope.to})
                }
            })
        })

3,{{}}–修改angular的绑定标记

/***
         * 如果需要再文本中使用不同于{{}}的符号来标识表达式的开始和结束,
         * 可以在$interpolateProvider中配置。
         * 用startSymbol()方法可以修改标识符的开始符号。这个方法接受一个参数:
         * value(字符型):开始符号的值
         * 用endSymbol()方法可以修改标识结束的符号。这个方法也接受一个参数;
         * value(字符型):结束符号的值
         * 如果要修改这两个符号的设置,需要在创建新模板时将$interpolateProvider注入进去
         */
        angular.module('emailParser',[])
            .config(['$interpolateProvider',function($interpolateProvider){
                $interpolateProvider.startSymbol('__');
                $interpolateProvider.endSymbol('__');
            }])
            .factory('EmailParser',['$interpolate',function($interpolate){
                //  处理解析的服务
                return {
                    parse:function(text,context){
                        var template = $interpolate(text);
                        return template(context);
                    }
                }
            }])
        /**
         * 以上,我们创建了一个模板,可以将它注入到应用中,并在邮件正文的文本中运行这个邮件解析器
         */
        angular.module('myApp',['emailParser'])
            .controller('MyController',['$scope','EmailParser',function($scope,EmailParser){
                //  设置监听
                $scope.$watch('emailBody',function(body){
                    if(body){
                        $scope.previewText = EmailParser.parse(body,{
                            to:$scope.to
                        })
                    }
                })
            }])

html:

    <div ng-controller="MyController">
        <input type="email" ng-model="to" placeholder="anyway">
        <textarea name="" id="" cols="30" rows="10" ng-model="emailBody"></textarea>
        <pre>__previewText__</pre>
    </div>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值