我们如何在类似于javascript的angular中使用$scope.$apply方法类似于function.apply(elem)?

我们如何在类似于javascript的angular中使用$scope.$apply方法类似于function.apply(elem)?,javascript,angularjs,angularjs-scope,apply,Javascript,Angularjs,Angularjs Scope,Apply,我用纯javascript创建了一个包含动态内容的页面,并以类似的方式创建了angular 我在javascript中使用apply方法重用分配给其他元素的函数。它工作得很好。我在这方面做不到。请参阅以下在JS和Angular中创建的物品。在函数move()方法中,通过onclick I设置动画将文本移动到一定距离。要查看动画,请单击两个插件中输出的所有文本。在JS plunker中,我在第38行使用了move.apply(firstElem)来设置onload中第一个孩子的动画但是我不能用an

我用纯javascript创建了一个包含动态内容的页面,并以类似的方式创建了angular

我在javascript中使用apply方法重用分配给其他元素的函数。它工作得很好。我在这方面做不到。请参阅以下在JS和Angular中创建的物品。在函数
move()
方法中,通过onclick I设置动画将文本移动到一定距离。要查看动画,请单击两个插件中输出的所有文本。在JS plunker中,我在第38行使用了
move.apply(firstElem)来设置onload中第一个孩子的动画但是我不能用angular做同样的事情。我想做一些简单的事情,就像我在JS中做的那样。哪种方法正确?我们可以使用$scope.$应用并解决此问题吗?还是其他方式?请帮忙

functionName.apply(elem); // javascript
$scope.move(elem); // angular


你看角度的部分看错了。在普通的Javascript/jQuery中,您通常以命令式的方式编写代码,比如告诉元素“向右移动100px”之类的。因此,在纯JS示例中,您告诉元素更改其位置和颜色

然而,在Angular中,您希望以声明性的方式编写代码。在您的情况下,这意味着当您拥有所有这些文本块时,它们应该具有一个属性来表示元素是否已向右移动,例如,是否应获取与移动的元素关联的样式

我们将创建一个css选择器来表示移动的元素,而不是直接修改元素的样式:

.moved {
    left: 100px;
    background: red;
}
然后,我们将使用
ng class
指令指定元素何时应该获得此类;也就是说,当它具有
moved
属性时。我们还将改变
$scope.move
函数的使用方式,并删除ng init,因为它完全没有必要

<div ng-class="{moved: x.moved}" ng-click="move(x)" class="divText" ng-repeat="x in myData">
    <div>{{ x.text }}</div>
</div>
然后,我们将使用
$timeout
在数据加载后不久移动第一个元素:

  $timeout(function() {
      $scope.move($scope.myData[0])
  }, 500)
就这样!现在,您的Angular示例中的功能与JS示例中的功能相同


我建议您阅读这个关于jQuery和Angular中编码差异的优秀stackoverflow答案:

为什么javascript和Angular中Move方法的签名不同?您能更详细地说明吗?我没听懂你的话谢谢你冗长的解释。但我这里有些问题。实际上,我想在一个函数中发送许多样式参数,并动态地移动、缩放或其他任何东西,但不是通过css类。我想动态调整对象的大小,如(body.clientWidth-screen.width/2)。它以不同的分辨率显示不同的大小。我不想使用css类添加“px”或“%”。请看我在angular做的新plunker。我添加了新的函数resize(param1,param2,…);我已经编辑了纯JS plunker,向您展示了我在angular中想要的东西。请调查JS plunker。。。这是我在第12、13行中试过的新的棱角弹射器。还添加了一个新按钮(向下移动)。即使此函数也适用于加载时移动的firstElement。我希望这是在角度工作,就像它在JS的工作方式。这就是我在js中给出变量'thumb=this'的原因。但如何将“this”指定给角度中的currentTarget。请帮我解决这个问题?如果你想添加多个动态样式,那么请使用感谢Fissio,谢谢你的时间,我会研究并尝试解决这个问题。
  $timeout(function() {
      $scope.move($scope.myData[0])
  }, 500)