次のディレクティブを検討してください: (ライブ デモ)
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 の方法」は何でしょうか?