天天看點

AngularJS實作滑鼠右鍵事件 事件冒泡

AngularJS實作滑鼠右鍵事件 事件冒泡

app.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服務可以講一個表達式轉換為一個函數。這個函數可以被調用,其中的參數是一個上下文對象,通常來說是作用域。另外,通過$parse的表達式傳回的這個函數有一個assign屬性。這個assign屬性也是一個函數,它可以用來在給定的上下文中改變這個表達式的值。

下面是一段簡單的代碼:

AngularJS實作滑鼠右鍵事件 事件冒泡

<div my-attr="obj.name" my-directive>testing</div>   

AngularJS實作滑鼠右鍵事件 事件冒泡

app.directive('mydirective',function($log,$parse){  

  return function(scope,elem,attrs){  

    //解析"my-attr屬性值到一個函數中"  

    var model = $parse(attrs.myattr);  

    //model現在是一個函數,可以調用它來擷取表達式的值  

    //下面這行代碼将會輸出作用域中obj.name的值    

    $log.log(model(scope));  

    elem.bind('click',function(){  

      //'model.assign'也是一個函數,它用來更新表達式的值    

      model.assign(scope,'new name');  

      scope.$apply();  

    })  

  }  

上面的例子可以充分展現我們為什麼需要$parse服務。如果屬性值是name,那麼我們完全可以不用$parse,隻用scope[attrs.myattr]即可。但是在上面的例子中,方括号并不管用。

 傳回上一頁

AngularJS實作滑鼠右鍵事件 事件冒泡

//傳回上一頁 window.history.back()  

.directive('backbutton', ['$window', function($window) {  

  return {  

    restrict: 'a',  

    link: function(scope, element, attrs) {  

      element.bind('click', function() {  

        $window.history.back();  

      });  

    }  

}])