AngularJS – ngClick,自定义指令和隔离范围问题

前端之家收集整理的这篇文章主要介绍了AngularJS – ngClick,自定义指令和隔离范围问题前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
请考虑以下指令: (Live Demo)
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方式”是什么?

我的建议是看看这些纺纱厂发生了什么. Be a little more API focused.

相关部分如下.我们使用常规回调来指示我们何时完成,因此微调器知道重置按钮的状态.

function SpinDemoCtrl($scope,$timeout,$q) {
  $scope.spinIt = false;

  $scope.longCycle = function(complete) {
    $timeout(function() {
      complete();
    },3000);
  };

  $scope.shortCycle = function(complete) {
    $timeout(function() {
      complete();
    },1000);
  };
}

app.directive('spinnerClick',scope: {
      spinnerClick: "=",},attrs) {
      var spinnerButton = angular.element("<button class='btn disabled'><i class='icon-refresh icon-spin'></i> Doing...</button>").hide();
      element.after(spinnerButton);

      element.click(function() {
        spinnerButton.show();
        element.hide();

        scope.spinnerClick(function() {
          spinnerButton.hide();
          element.show();
        });
      });
    }
  };
});

使用Angular风格的异步操作可以更好地工作,并通过在履行承诺时重置微调器来消除回调函数.

猜你在找的Angularjs相关文章