
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屬性也是一個函數,它可以用來在給定的上下文中改變這個表達式的值。
下面是一段簡單的代碼:

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

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]即可。但是在上面的例子中,方括号并不管用。
傳回上一頁

//傳回上一頁 window.history.back()
.directive('backbutton', ['$window', function($window) {
return {
restrict: 'a',
link: function(scope, element, attrs) {
element.bind('click', function() {
$window.history.back();
});
}
}])