Angular - 使用DIV元素样式的2路数据绑定

时间:2014-04-08 11:49:35

标签: javascript jquery angularjs jquery-ui 2-way-object-databinding

我正在使用Angular和jQueryUI构建拖动界面。我想使用Angular的原因是,我想要angularJS 2路数据绑定真的很棒!

以下是codepen - http://codepen.io/anon/pen/qmuvH/

在codepen中 - 你会看到有文字框 - "大家好" (DIV#层)。我确实用angular -

绑定了它的样式
top:{{layer.data.top}}px;left: {{layer.data.left}}px

并在同一 layer.data.top layer.data.left 中添加了两个输入字段 ng-model ; 因此,当您更改输入字段中的值时 - 它将移动div元素。到目前为止,这很有效。

但是我也做了那个"大家好"在angular指令中使用jqueryUI进行div draggable。所以你可以拖动那个元素。

我现在想要的是 - 如果我拖着#34;你好每个人" div元素 - 它还将更新 layer.data.left layer.data.top 。 所以这也会改变输入字段中的值。我怎么能这样做?

3 个答案:

答案 0 :(得分:2)

您可以尝试这样的事情:

Top : <input id='top' type="text" ng-model="layer.data.top">
Left : <input id='left' type="text" ng-model="layer.data.left"> 

为两个输入分配特定ID,然后在drag函数中执行此操作:

drag: function( event, ui ) {
   console.log(event);
   $('#top').val($(this).position().top);
   $('#left').val($(this).position().left);
}

Updated Codepen

答案 1 :(得分:1)

你可以在图层div上为mouseup添加一个事件监听器,它会调用一个相应地改变图层数据的函数, 所以它将是:

控制器内部的

1-定义一个这样的函数:

$scope.getInfo = function (layer) {
  var el = document.getElementById('layer');
  layer.data.left = parseInt(el.style["left"]);
  layer.data.top = parseInt(el.style["top"]);
}

2-将ng-mouseup="getInfo(layer)"添加到您的图层div

这里有一个更新的codepen

答案 2 :(得分:0)

在2个答案的帮助下,我最终使用了以下更新 -

我刚刚在拖动事件功能中更新了我的代码 -

drag: function( event, ui ) 
{
    scope.layer.data.left = ui.position.left;
    scope.layer.data.top = ui.position.top;
    scope.$apply();
}

这是更新的代码集 - http://codepen.io/anon/pen/wgzme