[Học AngularJS] - Bài 05 - $rootScope

Trong video này chúng ta sẽ tìm hiểu thành phần $rootScope trong agularjs. Ở video trước chúng ta đã tìm hiểu về $scope rồi và chắc các bạn cũng hiểu tác dụng của nó rồi, vậy $rootScope cũng có tác dụng tương tự nhưng có một điểm hơi khác biệt.

Trong mỗi controller sẽ có một $scope riêng biệt và không đụng lẫn nhau nên bạn hoàn toàn khai báo hai key giống nhau ở $scope của 2 controller mà nó không hề đụng tới nhau. Và $rootScope sẽ bao gồm toàn bỏ tất cả các $scope trong controller đó.

# Tạo hai controller ở HTML và file app.js

File: index.html

<body ng-app="myApp">
    <div ng-controller="Controller1">
        <input type="text" ng-model="message"/>
        {{message}}
    </div>
    <div ng-controller="Controller2">
        <input type="text" ng-model="message"/>
        {{message}}
    </div>
</body>
File app.js

myApp = angular.module('myApp', []);

myApp.controller("Controller1", function($scope){
    $scope.message = 'Chào mừng các bạn đến với freetuts.net';
});

myApp.controller("Controller2", function($scope){
    $scope.message = 'Học lập trình online freetuts.net';
});
Chạy lên bạn sẽ thấy hai dòng chữ ở hai controller khác nhau. 

# Sửa lại file app.js

Bây giờ ta tiến hành sửa nội dung của file app.js lại như sau:

myApp = angular.module('myApp', []);

myApp.controller("Controller1", function($scope, $rootScope){
    $rootScope.message = 'Chào mừng các bạn đến với freetuts.net';
});

myApp.controller("Controller2", function($scope){
});
Chạy lên các bạn thấy cả hai controller đều có cùng nội dung, nhưng nếu bạn nhập vào ô input thì nội dung sẽ không giống nhau nữa nhé.

Vậy ta có kết luận:

  • Để sử dụng $rootScope trong controller ta chỉ việc đưa nó vào tham số của hàm trong controller giống như $scope
  • Với $rootScope ta có thể truy xuất được các giá trị ở $scope ở tất cả các controller
  • $rootScope đóng vai trò là một $scope cha chứa toàn bộ $scope con
  • Nếu hai $scope có cùng key thì ở $rootScope khi gọi tới sẽ có tác dụng cho cả hai

# Sử dụng dấu chấm

Bây giờ ta sửa lại cả hai file như sau:

File index.html

<body ng-app="myApp">
    <div ng-controller="Controller1">
        <input type="text" ng-model="data.message"/>
        {{data.message}}
    </div>
    <div ng-controller="Controller2">
        <input type="text" ng-model="data.message"/>
        {{data.message}}
    </div>
</body>

File app.js

myApp = angular.module('myApp', []);

myApp.controller("Controller1", function($scope, $rootScope){
});

myApp.controller("Controller2", function($scope){
});
Ở controller trong file app.js tôi đã không làm gì cả, bây giờ bạn thử nhập dữ liệu và xem cả hai controller không hề dính líu tới nhau phải không nào.

Như vậy thay vì khai báo message thì ta có thể khai báo là data.message hoặc một cái tên bất kì, miễn là ở html khai báo sao thì trong $scope để sử dụng bạn phải khai báo y chang vậy.

# Summary

$rootScope là một thành phần $scope cha, nó có lợi thế là ở controller A bạn có thể sử dụng data ở controlller B một cách đơn giản thông qua biến $rootScope toàn cục.

Khóa học Angular 1x kết hợp với PHP và MySQL rất hay

Nếu bạn đang tìm hiểu Angular 1x + PHP/MySQL thì hãy tham khảo khóa học tạo ứng dụng Angular này, đây là khóa học được biên soạn bởi anh Việt, giảng viên tại fedu.vn. Trong khóa học này bạn sẽ được hướng dẫn sử dụng Angular 1  để hiển thi dữ liệu được trả về từ Server (PHP và MySQL).

Nguồn: freetuts.net