我正在使用AngularJS和UniformJS构建应用程序。我想在 View 上有一个重置按钮,将我的选择重置为其默认值。如果我使用uniform.js,它将无法正常工作。

您可以在此处进行检查:

http://plnkr.co/edit/QYZRzlRf1qqAYgi8VbO6?p=preview

如果连续单击“重置”按钮,则不会发生任何事情。
如果删除该属性,因此不再使用Uniform.js,则一切正常。

谢谢

更新:

需要使用超时。

app.controller('MainCtrl', function($scope, $timeout) {
  $scope.reset = function() {
    $scope.test = "";
    $timeout(jQuery.uniform.update, 0);
  };
});

最佳答案

找到了。为了完整起见,我在这里复制我的评论:

看来Uniform确实很hacky。它掩盖了实际的选择元素,并显示了span。 Angular正在工作。实际选择元素的值正在更改,但是Uniform显示的跨度没有更改。

因此,您需要告诉Uniform您的值已使用jQuery.uniform.update进行了更改。 Uniform会从实际元素中读取值以放置在跨度中,而angular直到摘要循环之后才更新实际元素,因此您需要稍等一会儿再调用update:

app.controller('MainCtrl', function($scope, $timeout) {
  $scope.reset = function() {
    $scope.test = "";
    $timeout(jQuery.uniform.update, 0);
  };
});

或者,您可以将其放在指令中:
app.directive('applyUniform',function($timeout){
  return {
    restrict:'A',
    require: 'ngModel',
    link: function(scope, element, attr, ngModel) {
      element.uniform({useID: false});
      scope.$watch(function() {return ngModel.$modelValue}, function() {
        $timeout(jQuery.uniform.update, 0);
      } );
    }
  };
});

关于AngularJS UniformJS选择控件未更新,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18215366/

10-12 03:56