.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属性,可以看出,当表达式为字符串的时候,进行一个手动的解析。如果是函数,直接返回。
时间: 2024-11-06 13:49:46