Cả hai đều có công dụng của chúng. Đầu tiên, một số lịch sử ...
$ scope là kỹ thuật "cổ điển" trong khi "bộ điều khiển như" gần đây hơn nhiều (kể từ phiên bản 1.2.0 chính thức mặc dù nó đã xuất hiện trong các bản phát hành trước không ổn định trước đó).
Cả hai đều hoạt động hoàn hảo và câu trả lời sai duy nhất là trộn chúng trong cùng một ứng dụng mà không có lý do rõ ràng. Thành thật mà nói, trộn chúng sẽ làm việc, nhưng nó sẽ chỉ thêm vào sự nhầm lẫn. Vì vậy, chọn một và cuộn với nó. Điều quan trọng nhất là phải nhất quán.
Cái nào? Điều đó phụ thuộc vào bạn. Có rất nhiều ví dụ khác về phạm vi $, nhưng "bộ điều khiển như" cũng đang lấy hơi. Cái này tốt hơn những cái khác phải không? Điều đó có thể tranh luận. Vậy bạn chọn như thế nào?
Thoải mái
Tôi thích "trình điều khiển là" vì tôi thích ẩn phạm vi $ và hiển thị các thành viên từ bộ điều khiển sang chế độ xem thông qua một đối tượng trung gian. Bằng cách đặt này. *, Tôi có thể hiển thị chính những gì tôi muốn hiển thị từ bộ điều khiển sang chế độ xem. Bạn cũng có thể làm điều đó với $ scope, tôi chỉ thích sử dụng JavaScript tiêu chuẩn cho việc này. Trong thực tế, tôi mã nó như thế này:
var vm = this;
vm.title = 'some title';
vm.saveData = function(){ ... } ;
return vm;
Điều này cảm thấy sạch hơn đối với tôi và giúp dễ dàng nhìn thấy những gì đang được tiếp xúc với chế độ xem. Lưu ý tôi đặt tên cho biến mà tôi trả về "vm", viết tắt của viewmodel. Đó chỉ là quy ước của tôi.
Với $ scope tôi có thể làm những điều tương tự, vì vậy tôi không thêm hoặc làm giảm kỹ thuật.
$scope.title = 'some title';
$scope.saveData = function() { ... };
Vì vậy, nó phụ thuộc vào bạn ở đó.
Mũi tiêm
Với $ scope tôi cần phải tiêm $ scope vào bộ điều khiển. Tôi không phải làm điều này với bộ điều khiển, trừ khi tôi cần nó vì một số lý do khác (như $ Broadcast hoặc đồng hồ, mặc dù tôi cố gắng tránh đồng hồ trong bộ điều khiển).
CẬP NHẬT
Tôi đã viết bài đăng này về 2 sự lựa chọn:
http://www.johnpapa.net/do-you-like-your-angular-controllers-with-or-without-sugar/