2013-07-25 2 views
0

Я хотел бы сделать директиву, которая выглядит следующим образом (прохождение в выражении):Как получить доступ к выражению в директиве AngularJS?

<button ui:spin="form.submitting">Save</button> 

Но я не уверен, если это возможно (или как), чтобы получить доступ к выражению form.submitting. В прошлом я сделал что-то вроде этого:

<button ui:spinner-button ui:spin="form.submitting">Save</button> 

Где я прочитал атрибут uiSpin в директиве uiSpinnerButton, но я хотел бы знать, как сделать это «все в одном»

Любые идеи?

ответ

2

Вы должны быть в состоянии ссылаться на него, определив сферу Директивы следующим образом:

scope: { 
    spin: '=uiSpin' 
} 

Внутри функции, связывающей директивы, он будет scope.spin.

+0

Должно быть 'spin: '= uiSpin'' – noj

+0

oops, thanks @jonnyynnoj – DanS

+0

Забыл упомянуть, я хотел бы сделать это с неизолированной областью. – mmattax

1

Для неизолированной области, следует использовать $parse:

myApp.directive('uiSpin', function($parse) { 
    return function(scope, element, attrs) { 
     var model = $parse(attrs.uiSpin) 
     console.log(model(scope)); 
     // If you want to change the value in your directive: 
     model.assign(scope, "???"); 
    } 
}); 

Если вам не нужно, чтобы изменить значение, вы можете просто использовать $ Eval вместо:

console.log(scope.$eval(attrs.uiSpin)); 
+0

Почувствуйте, что это близко, как я могу следить за изменениями, например: scope.watch (function() {return scope. $ Eval (attrs.uiSpin);}, function() {console.log ('uiSpin changed');}); похоже, не работает, – mmattax

+1

Это должно работать (отсутствует '' 'перед' watch'?) Вы также можете посмотреть 'model':' scope. $ watch (model, ...) ', или как вы уже Вы можете посмотреть атрибут: 'scope. $ watch (attrs.uiSpin, ...)'. –

Смежные вопросы