2014-08-31 80 views
1

我在学习AngularJs,我正在玩第三方Javascript组件。 在某一点上的控件初始化如下:Angular的jQuery元素初始化

$(document).ready(function() { 
    $('#SomeId').initialize(); 
}); 

有没有办法将其转换为更多的东西Angularish?我不想操纵控制器中的DOM,但我不确定如何初始化它。

+2

您可以为该功能创建指令并将DOM操作和初始化代码移到那里。阅读更多关于指令 – 2014-08-31 19:22:09

回答

3

此代码不一定是错误的。你要注意的是,在角度上下文(jQuery回调/插件等)之外的javascript操纵$scope值,因为这些函数不会触发角度摘要循环,并且会导致DOM和$ scope之间断开连接。

以下是有关这个周期,你需要知道它是什么的一些详细信息:http://jimhoskins.com/2012/12/17/angularjs-and-apply.html

这是一个常见的情况与jQuery(以及为什么你应该尝试使用角度服务(即:$ HTTP ),而不是:

// When you manipulate the $scope with a non-angular callback, 
// you have to run $scope.$apply() to tell angular about the 
// change in order to repaint the DOM 

$.get("/getUser", function(data) { 
    $scope.user = data; // set $scope data in callback 
    $scope.$apply(); // run digest so anything in the DOM binded to the {{user}} model gets updated 
}); 
2

一般来说,你不需要操作DOM这样有角...所以你真的不需要jQuery的使用角“指令”是声明,封装方式做它在Angular中有很多第三方组件可供你使用,这些组件都是用指令正确构建的:修改使用这些,而不是试图转换一个jQuery插件(这实际上只是添加了你已经有权访问的Angular的jQuery膨胀)。开始寻找可以使用的Angular指令的好地方是http://ngmodules.org/