为什么需要`$ scope.apply`?

时间:2015-01-30 06:47:50

标签: javascript html angularjs forms

以下是DEMO

我不太明白这个指令定义:

.directive('ngFocus', [function() {
  var FOCUS_CLASS = "ng-focused";
  return {
    restrict: 'A',
    require: 'ngModel',
    link: function(scope, element, attrs, ctrl) {
      ctrl.$focused = false;
      element.bind('focus', function(evt) {
        element.addClass(FOCUS_CLASS);
        scope.$apply(function() {ctrl.$focused = true;});
      }).bind('blur', function(evt) {
        element.removeClass(FOCUS_CLASS);
        scope.$apply(function() {ctrl.$focused = false;});
      });
    }
  };
}])

scope.$apply(function() {ctrl.$focused = true;});看起来有点奇怪。 ctrl不应与scope.signupform.name相同吗?在HTML代码<div class="error" ng-show="signup_form.name.$dirty && signup_form.name.$invalid && !signup_form.name.$focused">中,signup_form.name.$focused已被监听。为什么我不能仅使用ctrl.$focused=true而不包含scope.$apply ..

此外,我发现这个DEMO效果不好。预计错误消息将隐藏,直到该字段失去焦点。但是,在下图中,当字段仍然保持聚焦时显示错误消息..

screencast

有没有人对此有任何想法?谢谢!

0 个答案:

没有答案