روش Controller as در AngularJs
اندازه‌ی قلم متن
تخمین مدت زمان مطالعه‌ی مطلب: یک دقیقه

در پست‌های قبلی بیان شد که برای پیاده سازی عملیات مقید سازی عناصر View به مدل در کنترلر باید scope$ را به تابع سازنده کنترلر تزریق کرد. برای مثال:
var app = angular.module('myApp', []);

app.controller('myController', function ($scope) {
    $scope.name = 'Masoud';
    $scope.family = 'Pakdel';
})
View متناظر نیز به صورت می‌باشد:
<div ng-app="myApp">
    <div ng-controller="myController">       
        <div>
            {{name}} {{family}}
        </div>
    </div>
</div>
در Angular 1.2 روشی به نام controller as معرفی شده است که با توجه به نوع پیاده سازی آن نیازی به تزریق scope$ در توابع سازنده نیست. فقط در کنترلر به جای وابستگی مستقیم به scope$ ا زکلمه کلیدی this و در هنگام عملیات مقید سازی باید از نام مستعار تعیین شده برای کنترلر استفاده نمایید. برای مثال
var app = angular.module('myApp', []);

app.controller('myController', function () {
    this.name = 'Masoud';
    this.family = 'Pakdel';
})
و استفاده آن در View
<div ng-app="myApp">
    <div ng-controller="myController as myCtrl">       
        <div>
            {{myCtrl.name}} {{myCtrl.family}}
        </div>
    </div>
</div>
در هنگام عملیات routing نیز می‌توان این عناوین مستعار را برای کنترلر با استفاده از controllerAs مشخص نمود. به صورت زیر:
app.config(function($routeProvider){
    $routeProvider.when('/first', { 
            templateUrl: 'first.html', 
            controller: 'FirstCtrl', 
            controllerAs:'fc' })
        .when('/second', { 
            templateUrl: 'second.html' , 
            controller: 'ُSecondCtrl', 
            controllerAs:'sc' })
        .otherwise({ 
            redirectTo: '/first' 
       });
});
  • #
    ‫۱۰ سال و ۹ ماه قبل، پنجشنبه ۲۸ آذر ۱۳۹۲، ساعت ۲۰:۱۵
    ممنون؛ می‌خواستم بپرسم به جز syntax استفاده مزیت دیگری نیز دارد؟ چون به شخصه استفاده از scope$ را بیشتر می‌پسندم.
    • #
      ‫۱۰ سال و ۹ ماه قبل، جمعه ۲۹ آذر ۱۳۹۲، ساعت ۰۰:۵۷
      خیر. در مجموع نمی‌توان تفاوتی خاص بین این دو روش برشمرد. scope$ روشی کلاسیک است در حالی که controller as در نسخه جدید پشتیبانی می‌شود. مهم‌ترین مزیت روش controler as عدم تزریق scope$ به تابع سازنده کنترلر است؛ اما علاوه بر این به نظر من روش controller as به دلیل استفاده از this که تقریبا تمام برنامه نویسان جاوااسکریپ با آن آشنایی دارند روشی تمیزتر است. البته بد نیست که نگاهی هم به (^) داشته باشید.