angular 右击事件的写法

.directive('ngRightClick', function ($parse){
        return function (scope, element, attrs){
            var fn = $parse(attrs.ngRightClick);
            element.bind('contextmenu', function (event){
               scope.$apply(function (){
                   event.preventDefault();
                   fn(scope, {$event:event})
               });
            });
        }
    });

其中,$parse是手动解析服务。

使用自定义指令,返回一个右击函数,$apply监视$scope的变化。

this.$get = ['$filter', '$sniffer', '$log', function($filter, $sniffer, $log) {
$parseOptions.csp = $sniffer.csp;
promiseWarning = function promiseWarningFn(fullExp) {
    if (!$parseOptions.logPromiseWarnings || promiseWarningCache.hasOwnProperty(fullExp)) return;
    promiseWarningCache[fullExp] = true;
    $log.warn('[$parse] Promise found in the expression `' + fullExp + '`. ' +
        'Automatic unwrapping of promises in Angular expressions is deprecated.');
};
return function(exp) {
    var parsedExpression;
    switch (typeof exp) {
        case 'string':
            if (cache.hasOwnProperty(exp)) {
                return cache[exp];
            }
            var lexer = new Lexer($parseOptions);
            var parser = new Parser(lexer, $filter, $parseOptions);
            parsedExpression = parser.parse(exp, false);
            if (exp !== 'hasOwnProperty') {                     
                cache[exp] = parsedExpression;
            }
            return parsedExpression;
        case 'function':
            return exp;
        default:
            return noop;
    }
};
}];

这是$parse服务的$get属性,可以看出,当表达式为字符串的时候,进行一个手动的解析。如果是函数,直接返回。

posted @ 2017-05-10 15:13  云遮夏靥  阅读(283)  评论(0编辑  收藏  举报