【问题标题】:Image crop with AngularJS使用 AngularJS 裁剪图像
【发布时间】:2012-12-28 10:56:51
【问题描述】:

我想让用户裁剪图像,我找到了这个 JQuery 插件 - http://deepliquid.com/content/Jcrop.html

我尝试将它与 Angular-ui 的 Jquery 直通选项一起使用,将 ui-jq=Jcrop 指令添加到 <img>

问题是,如果我使用 ng-src 来动态更改图像,它就不起作用并且什么也看不到。如果我将其更改为 src 并放置一个静态 url,我可以看到图像和 Jcrop。

我该如何解决? 另外,我怎样才能听 Jcrop 的回调来知道用户的选择是什么?

有没有更好/更简单的方法向 AngularJS 添加图像裁剪功能?

【问题讨论】:

标签: angularjs jcrop angular-ui


【解决方案1】:

这是我的解决方案:

我已经编写了一个指令来创建 img 元素并在其上应用插件。当 src 改变时,这个 img 被删除,插件创建的内容也被销毁,然后用新的 src 重新创建新的 img 并再次在其上应用插件。

还提供了 'selected' 回调,以便能够协调选择的内容(包装在 $apply 中,以便您可以修改其中的范围值)。

查看my solution at Plunker

【讨论】:

  • 如果我将您的解决方案与 setSelect for JCrop 选项一起使用,即使我尝试使用 if (!scope.$$phase) 包装 scope.$apply 语句,它也会导致 Error: $digest already in progress,我该如何解决这个问题?
  • 你能分叉我的 Plunker 并添加你如何使用 setSelect 吗?
  • setSelect 工作正常,我从输入文本中给出的 url 插入图像,并且我在文本框上有另一个指令来验证 url 是图像。这太混乱并导致问题。如何将图像验证添加到您的指令中,例如“imageOK”,这将说明 src url 是否确实是图像。我还想隐藏元素以防它无效,以便不会显示小的丢失图像图标。我是指令新手,这让我很困惑:-)
  • 我建议这样做:将'url'绑定到输入用户可以输入他的url的位置。然后在控制器处添加$watch('url',...) 并进行验证,并在成功验证后更新$scope.imageUrl 和bing 指令到imageUrl(不是url
  • 指令有一些问题,请看stackoverflow.com/questions/14504393/…
【解决方案2】:

我在这里使用 AngularJS 和 Jcrop 构建了一个演示:

演示:https://coolaj86.github.com/angular-image-crop

在 Github 上:https://github.com/coolaj86/angular-image-crop

【讨论】:

    【解决方案3】:

    您可以利用ui-event 创建一个事件定义对象,其中键是事件名称,值是回调。或者您可以简单地将这些事件作为选项传递给 Jcrop (according to the documentation)

    最后,a new update 来到 ui-jq,让您可以添加 ui-refresh,这是一个被监视以重新触发插件的表达式。

    理论上你应该可以做到

    <img ui-jq="Jcrop" 
         ui-options="{onSelect:myCallback}"
         ui-event="{onChange:'myCallback($event)'}"
         ui-refresh="imgSrc"
         ng-src="imgSrc" />
    

    注意:这只是重新启动 passthrough,并不意味着这会自动解决问题或插件在重新初始化时会正常运行

    我们仍在研究一种允许您在不同时间触发不同事件的好方法。

    【讨论】:

    • 据我了解, ui-refresh 只会重新触发插件,在同一元素上再次调用它。但是有很多插件会在源元素之外添加许多带有一些内容的额外元素。例如,Jcrop 插件会在&lt;img&gt; 之后添加&lt;div&gt;。因此,再次重新启动插件不会更新或删除 - 添加此动态内容。我个人不知道,对于任何通用插件,如何跟踪添加的插件......
    • 这是一个你必须逐个插件调用的调用,因为一些插件只是更新或刷新。
    猜你喜欢
    • 2017-05-22
    • 1970-01-01
    • 2016-05-25
    • 2013-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多