2014-08-31 56 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/