สิ่งที่ควรรู้
การใช้ $scope ใน controller
โดยปกติการใช้ $scope ใน Controller จะเป็นการระบุถึงการใช้งานภายใน controller โดยมีลักษณะดังนี้
app.controller('someController', function ($scope, $http) { $scope.someData = "..."; });
โดยไม่จำเป็นที่จะต้องเรียงลำดับตัวแปรก็ได้
app.controller('someController', function ($http, $scope) { $scope.someData = "..."; });
แต่มันเกิดปัญหาขึ้นที่ว่า เมื่อมีการบีบอัดไฟล์ js ทำให้ $scope ถูกแก้ไขชื่อเป็นตัวแปรอื่น ทำให้ AngularJS หา $scope ไม่เจอ AngularJS จึงใช้วิธีแก้ดังนี้
โดยไม่ได้สนใจว่าตัวแปรจะเป็นอะไร แต่จะเรียงลำดับให้ตามข้อความที่ระบุไว้ด้านหน้าฟังก์ชั่น
แนะนำให้ใช้ตัวแปรเดียวกัน เพื่อการ clean code
app.controller('someController', ['$scope','$http', function (x,y) { x.someData = "..."; } ] );
การใช้ scope ใน Directive
ลักษณะ scope ใน Directive จะไม่เหมือนใน Controller ที่ระบุชื่อตัวแปรที่ต้องใช้ไว้แล้ว
โดยในฟังก์ชั่น link จะเรียกลำดับพารามิเตอร์ดังนี้
- scope
- element
- attribute
app.directive("someDirective", function () { return { restrict: 'E', template: '{{someAttr}}', link: function (scope, element, attribute) { .... } }; });
ในฟังก์ชั่น link สามารถเปลี่ยนชื่อตัวแปรเป็นอะไรก็ได้ เนื่องจากไม่สนใจชื่อตัวแปร
แนะนำให้ใช้ชื่อตัวแปรเดิม เพื่อการ clean code
app.directive("someDirective", function () { return { restrict: 'E', template: '{{someAttr}}', link: function (x, y, z) { // x is scope, y is element, z is attribute .... } }; });