javascript - 原始 JS 事件不会触发 ng-disabled 更改

标签 javascript angularjs fabricjs

我不知道为什么下面的代码不能正常工作?我希望当我选择图片时, object:selected 事件被触发并且我确实看到打印输出,但是按钮上 ng-disabled 的状态没有改变?不过,切换复选框确实可以正确切换按钮的禁用状态。任何原因?我们是否需要触发任何特定的东西来进行 Angular “重新渲染”?谢谢

<!doctype html>
<html lang="en" ng-app="testApp">
<head>
  <script src="//cdnjs.cloudflare.com/ajax/libs/angular.js/1.2.16/angular.js"></script>
  <script src="//fabricjs.com/lib/fabric.js"></script>
<script>
var app = angular.module('testApp', []);
app.controller('mainController', function($scope) {
  $scope.buttonDisabled = true;
  $scope.canvas = new fabric.Canvas('c');
  fabric.Image.fromURL("http://lh3.ggpht.com/WDiCN0jYNq_OfzjMwu07XJ9KWOa5AuMxeojLCgTrjCeAtBNd1AKAglIrJBNHbynsFY2HCE-gtOZQVrpN0eG7thFmydfv0STKREJhWaeklg=s660" , function (img ){
    $scope.canvas.add(img);
  }, {crossOrigin:"anonymous"});

  $scope.canvas.on( 'object:selected', function() {
    $scope.buttonDisabled = !$scope.buttonDisabled;
    console.log("IsDisabled:", $scope.buttonDisabled);
  } )

});
</script>
</head>

<body ng-controller="mainController">
<canvas id="c" width="800" height="500"></canvas>
Toggle<input type="checkbox" ng-model="buttonDisabled"><br/>
<button ng-disabled="buttonDisabled">Button</button>

</body>
</html>

最佳答案

事件监听器是一个 jquery 事件,因此您的函数不会在 Angular 上下文中调用。

您应该使用 $scope.$apply() 包装函数内容以启动摘要循环,该循环将对您的范围值执行脏检查,会发现 buttonDisabled 已更改并相应地更新 View 。操作方法如下:

$scope.canvas.on( 'object:selected', function() {
  $scope.$apply(function () {
      $scope.buttonDisabled = !$scope.buttonDisabled;
      console.log("IsDisabled:", $scope.buttonDisabled);
  });
});

关于javascript - 原始 JS 事件不会触发 ng-disabled 更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23586752/

相关文章:

javascript - Fabricjs canvas.clipTo – 在剪辑区域外显示对象的控件

fabricjs - 有没有办法只从 Canvas 上裁剪设计并忽略所有白色/透明空间?

javascript - Angular 4 - 处理通用组件的样式或使用特定组件的成本更高

javascript - 使用字符串作为名称创建对象

jquery - 在我的链接函数中注册的事件监听器未被触发

javascript - 我想将不存在的项目推送到已声明的对象中(如果它们尚不存在),则使用 Angular 中的 lodash

javascript - Fabric js如何防止对象缩放到 Canvas 边界之外?

javascript - 使用 LocalStorage 并默认选中复选框

javascript - 如何使用 JQuery 读取远程文件(并获得 jqXHR 可读错误)

javascript - iElement 在 AngularJS 的链接函数中代表什么?