Tôi đang làm việc trên một bằng chứng về khái niệm bằng Angular JavaScript.
Làm cách nào để gỡ lỗi mã Angular JavaScript trong các trình duyệt khác nhau (Firefox và Chrome)?
Tôi đang làm việc trên một bằng chứng về khái niệm bằng Angular JavaScript.
Làm cách nào để gỡ lỗi mã Angular JavaScript trong các trình duyệt khác nhau (Firefox và Chrome)?
Câu trả lời:
1. Chrome
Để gỡ lỗi AngularJS trong chrome, bạn có thể sử dụng AngularJS Batarang . (Từ các đánh giá gần đây về plugin, có vẻ như AngularJS Batarang không còn được duy trì. Đã thử nghiệm trong các phiên bản chrome khác nhau không hoạt động)
Đây là Liên kết để mô tả và Demo:
Giới thiệu Angular JS Batarang
Tải xuống plugin chrome từ đây: plugin chrome để gỡ lỗi AngularJS
Bạn cũng có thể tham khảo link này: ng-book: Debugging AngularJS
Bạn cũng có thể sử dụng ng-register để gỡ lỗi angle.
2. Firefox
Đối với Firefox với sự trợ giúp của Firebug, bạn có thể gỡ lỗi mã.
Đồng thời sử dụng Tiện ích bổ sung Firefox này : AngScope: Tiện ích bổ sung cho Firefox (Không phải là tiện ích mở rộng chính thức của AngularJS Team)
3. Gỡ lỗi AngularJS : Kiểm tra liên kết: Gỡ lỗi AngularJS
ng-inspect
nếu Batarang đang làm bạn đau đầu.
IMHO, trải nghiệm khó chịu nhất đến từ việc lấy / đặt giá trị của một phạm vi cụ thể liên quan đến yếu tố hình ảnh. Tôi đã thực hiện rất nhiều breakpoint không chỉ trong mã của riêng mình mà còn trong chính bản thân angle.js, nhưng đôi khi nó không đơn giản là cách hiệu quả nhất. Mặc dù các phương pháp dưới đây rất hiệu quả, nhưng chúng chắc chắn bị coi là hành vi xấu nếu bạn thực sự sử dụng trong mã sản xuất, vì vậy hãy sử dụng chúng một cách khôn ngoan!
Trong nhiều trình duyệt không phải IE, bạn có thể chọn một phần tử bằng cách nhấp chuột phải vào một phần tử và nhấp vào "Kiểm tra phần tử". Ngoài ra, bạn cũng có thể nhấp vào bất kỳ phần tử nào trong tab Elements trong Chrome chẳng hạn. Phần tử được chọn mới nhất sẽ được lưu trữ trong biến $0
trong bảng điều khiển.
Tùy thuộc vào việc có tồn tại một chỉ thị tạo một phạm vi cô lập hay không, bạn có thể truy xuất phạm vi bằng cách angular.element($0).scope()
hoặc angular.element($0).isolateScope()
(sử dụng $($0).scope()
nếu $ được bật). Đây chính xác là những gì bạn nhận được khi sử dụng phiên bản Batarang mới nhất. Nếu bạn đang thay đổi giá trị trực tiếp, hãy nhớ sử dụng scope.$digest()
để phản ánh các thay đổi trên giao diện người dùng.
Không nhất thiết để gỡ lỗi. scope.$eval(expression)
rất tiện dụng khi bạn muốn nhanh chóng kiểm tra xem một biểu thức có giá trị mong đợi hay không.
Sự khác biệt giữa scope.bla
và scope.$eval('bla')
cũ không xem xét các giá trị được kế thừa nguyên mẫu. Sử dụng đoạn mã dưới đây để có toàn bộ bức tranh (bạn không thể thay đổi trực tiếp giá trị, nhưng bạn vẫn có thể sử dụng $eval
!)
scopeCopy = function (scope) {
var a = {};
for (x in scope){
if (scope.hasOwnProperty(x) &&
x.substring(0,1) !== '$' &&
x !== 'this') {
a[x] = angular.copy(scope[x])
}
}
return a
};
scopeEval = function (scope) {
if (scope.$parent === null) {
return hoho(scope)
} else {
return angular.extend({}, haha(scope.$parent), hoho(scope))
}
};
Sử dụng nó với scopeEval($($0).scope())
.
Đôi khi bạn có thể muốn theo dõi các giá trị ngModel
khi bạn đang viết một chỉ thị. Sử dụng $($0).controller('ngModel')
và bạn sẽ nhận được để kiểm tra $formatters
, $parsers
, $modelValue
, $viewValue
$render
và tất cả mọi thứ.
cũng có $ log mà bạn có thể sử dụng! nó sử dụng bảng điều khiển của bạn theo cách bạn muốn nó hoạt động!
hiển thị lỗi / cảnh báo / thông tin theo cách mà bảng điều khiển của bạn hiển thị cho bạn bình thường!
sử dụng cái này> Tài liệu
Mặc dù câu hỏi đã được trả lời, nhưng có thể rất thú vị khi nhìn vào ng-tra.
Hãy thử ng-tra. Tải xuống tiện ích bổ sung cho Firefox từ trang web http://ng-ins Inspector.org/ . Nó không có sẵn trên menu add on của Firefox.
http://ng - ins Inspector.org/ - trang web
http://ng - ins Inspector.org/ng-ins Inspector.xpi - Tiện ích bổ sung của Firefox
Thật không may, hầu hết các tiện ích bổ sung và tiện ích mở rộng trình duyệt chỉ hiển thị các giá trị cho bạn nhưng chúng không cho phép bạn chỉnh sửa các biến phạm vi hoặc chạy các hàm góc cạnh. Nếu bạn muốn thay đổi các biến $ scope trong bảng điều khiển trình duyệt (trong tất cả các trình duyệt) thì bạn có thể sử dụng jquery. Nếu bạn tải jQuery trước AngularJS, thì angle.element có thể được chuyển qua một bộ chọn jQuery. Vì vậy, bạn có thể kiểm tra phạm vi của bộ điều khiển với
angular.element('[ng-controller="name of your controller"]').scope()
Ví dụ: Bạn cần thay đổi giá trị của biến $ scope và xem kết quả trong trình duyệt, sau đó chỉ cần nhập vào bảng điều khiển của trình duyệt:
angular.element('[ng-controller="mycontroller"]').scope().var1 = "New Value";
angular.element('[ng-controller="mycontroller"]').scope().$apply();
Bạn có thể thấy các thay đổi trong trình duyệt của mình ngay lập tức. Lý do chúng tôi sử dụng $ apply () là: bất kỳ biến phạm vi nào được cập nhật từ ngữ cảnh góc bên ngoài sẽ không cập nhật ràng buộc nó, Bạn cần chạy chu trình thông báo sau khi cập nhật các giá trị của phạm vi đang sử dụng scope.$apply()
.
Để quan sát giá trị biến $ scope, bạn chỉ cần gọi biến đó.
Ví dụ: Bạn muốn xem giá trị của $ scope.var1 trong bảng điều khiển web trong Chrome hoặc Firefox, chỉ cần nhập:
angular.element('[ng-controller="mycontroller"]').scope().var1;
Kết quả sẽ được hiển thị trong bảng điều khiển ngay lập tức.
Thêm cuộc gọi đến debugger
nơi bạn định sử dụng nó.
someFunction(){
debugger;
}
Trong console
tab công cụ dành cho nhà phát triển web của trình duyệt của bạn, vấn đềangular.reloadWithDebugInfo();
Truy cập hoặc tải lại trang bạn định gỡ lỗi và xem trình gỡ lỗi xuất hiện trong trình duyệt của bạn.
var rootEle = document.querySelector("html");
var ele = angular.element(rootEle);
scope () Chúng ta có thể tìm nạp phạm vi $ từ phần tử (hoặc cha của nó) bằng cách sử dụng phương thức scope () trên phần tử:
var scope = ele.scope();
kim phun ()
var injector = ele.injector();
Với bộ tiêm này, sau đó chúng tôi có thể khởi tạo bất kỳ đối tượng Angular nào bên trong ứng dụng của chúng tôi, chẳng hạn như dịch vụ, bộ điều khiển khác hoặc bất kỳ đối tượng nào khác
Bạn có thể thêm 'trình gỡ lỗi' vào mã của mình và tải lại ứng dụng, điều này sẽ đặt điểm ngắt ở đó và bạn có thể 'bước qua' hoặc chạy.
var service = {
user_id: null,
getCurrentUser: function() {
debugger; // Set the debugger inside
// this function
return service.user_id;
}
Bạn có thể gỡ lỗi bằng các trình duyệt được tích hợp sẵn trong các công cụ dành cho nhà phát triển.
mở công cụ dành cho nhà phát triển trong trình duyệt và chuyển đến tab nguồn.
mở tệp mà bạn muốn gỡ lỗi bằng Ctrl + P và tìm kiếm tên tệp
thêm điểm ngắt trên một dòng bằng cách nhấp vào bên trái của mã.
làm mới trang.
Có rất nhiều plugin để gỡ lỗi bạn có thể tham khảo để sử dụng plugin chrome Gỡ lỗi ứng dụng Angular bằng plugin "Debugger for chrome"
Đối với Mã Visual Studio (Không phải Visual Studio), hãy thực hiện Ctrl+ Shift+P
Nhập Debugger cho Chrome vào thanh tìm kiếm, cài đặt và kích hoạt nó.
Trong launch.json
tệp của bạn, hãy thêm cấu hình này:
{
"version": "0.1.0",
"configurations": [
{
"name": "Launch localhost with sourcemaps",
"type": "chrome",
"request": "launch",
"url": "http://localhost/mypage.html",
"webRoot": "${workspaceRoot}/app/files",
"sourceMaps": true
},
{
"name": "Launch index.html (without sourcemaps)",
"type": "chrome",
"request": "launch",
"file": "${workspaceRoot}/index.html"
},
]
}
Bạn phải khởi chạy Chrome có bật gỡ lỗi từ xa để tiện ích mở rộng đính kèm vào nó.
Right click the Chrome shortcut, and select properties In the "target" field, append --remote-debugging-port=9222 Or in a command prompt, execute /chrome.exe --remote-debugging-port=9222
In a terminal, execute /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --remote-debugging-port=9222
In a terminal, launch google-chrome --remote-debugging-port=9222
Since the add-ons don't work anymore, the most helpful set of tools I've found is using Visual Studio/IE because you can set breakpoints in your JS and inspect your data that way. Of course Chrome and Firefox have much better dev tools in general. Also, good ol' console.log() has been super helpful!
Maybe you can use Angular Augury A Google Chrome Dev Tools extension for debugging Angular 2 and above applications.