次のディレクティブを検討してください: (ライブ デモ)
app.directive('spinner', function() {
return {
restrict: 'A',
scope: {
spinner: '=',
doIt: "&doIt"
},
link: function(scope, element, attrs) {
var spinnerButton = angular.element("<button class='btn disabled'><i class='icon-refresh icon-spin'></i> Doing...</button>");
element.after(spinnerButton);
scope.$watch('spinner', function(showSpinner) {
spinnerButton.toggle(showSpinner);
element.toggle(!showSpinner);
});
}
};
});
これは次のように使用されます:
<button ng-click="doIt()" spinner="spinIt">Spin It</button>
spinner
の値 (つまり、$scope.spinIt
この例では の値) がの場合true
、要素は非表示になり、spinnerButton
代わりに表示されます。spinner
の値が の場合false
、要素を表示して非表示にspinnerButton
する必要があります。
ここでの問題はdoIt()
、分離されたスコープにないため、クリック時に呼び出されないことです。
このディレクティブを実装するための「Angular の方法」は何でしょうか?