- data binding یعنی دقیقا به روز شدن اطلاعات با تغییرات کاربر. اگر مدنظر شما نیست، به صورت دستی آن‌را مدیریت کنید. ابتدا کار اتصال به رخداد blur را انجام دهید:
<input type="text" [(ngModel)]="myModel" (blur)="onBlurMethod()">
و بعد تعریف متد معادل آن در کلاس کامپوننت:
export class AppComponent {  
   myModel: any;  

   constructor(){
          this.myModel = '123';  
   }

   onBlurMethod(){  
     alert(this.myModel);   
   }
}

+ Observableها دارای متدی هستند به نام debounceTime که برای همین منظور طراحی شده‌است. یک مثال:
export class AppComponent {
    searchForm: ControlGroup;
    results: Observable<any[]>;

    constructor(private http: Http) {
        let searchField = new Control();
        this.searchForm = new ControlGroup({searchField});
        this.results = searchField.valueChanges
                  .debounceTime(500)
                  .switchMap((val:string) => {
                         return this.search(val);
                  });
    }
البته این مورد بر روی async validation تاثیری ندارد. برای رفع این مشکل می‌توان از راه حلی مانند «Debouncing Angular 2 Input Component» و یا «How to add debounce time to an async validator in angular 2» استفاده کرد (فعلا؛ در زمان نگارش این مطلب).
‫۸ سال و ۴ ماه قبل، چهارشنبه ۵ خرداد ۱۳۹۵، ساعت ۲۰:۱۵
یک نکته‌ی تکمیلی
مزیت استفاده از روش webpack، امکان تعریف یک چنین آدرس دهی‌هایی است جهت یکی کردن فایل‌های html با فایل bundle نهایی:
template: require('./app.component.html'),
برای gulp هم افزونه‌ای به نام «gulp-angular-embed-templates» وجود دارد که چنین کاری را انجام می‌دهد (بدون نیاز به استفاده از متد require به صورت فوق). برای فایل‌های CSS هم از افزونه‌ی «gulp-angular2-embed-sass » می‌توان استفاده کرد.
در این حالت وظیفه‌ی tsc به شکل زیر درخواهد آمد:
var embedTemplates = require('gulp-angular-embed-templates');

gulp.task("tsc", () => {
    var tsProject = tsc.createProject("./tsconfig.json");
    var tsResult = gulp.src([appFolder + "/**/*.ts"])
    .pipe(embedTemplates({
        debug: true,
        basePath: "./",
        sourceType: "ts",
        minimize: {
            empty: true,
            spare: true,
            quotes: true,
            dom: {
                xmlMode: true,
                lowerCaseAttributeNames: false,
                lowerCaseTags: false
            }
        }
    })) // inline templates
    .pipe(tsc(tsProject), undefined, tsc.reporter.fullReporter());

    return tsResult.js.pipe(gulp.dest(appFolder));
});
و دیگر نیازی به وظیفه‌ی templates نیست.
‫۸ سال و ۴ ماه قبل، چهارشنبه ۵ خرداد ۱۳۹۵، ساعت ۱۸:۲۱
به روز رسانی

در آخرین تغییرات وابستگی‌های AngularJS 2.0 این موارد لحاظ شده‌اند:
الف) در فایل package.json بجای es6-promise و es6-shim، فقط از core-js استفاده شده‌است:
    "dependencies": {
       // ...
        "core-js": "^2.4.0",
       // ...
    },
ب) فایل typings.json واقع در ریشه‌ی پروژه، جهت ذکر core-js به صورت زیر تغییر یافته است:
{
    "ambientDependencies": {
        "core-js": "registry:dt/core-js#0.0.0+20160317120654",
        "jasmine": "registry:dt/jasmine#2.2.0+20160505161446",
        "node": "registry:dt/node#4.0.0+20160509154515"
    }
}
ج) اینبار ابتدای فایل main.ts به صورت زیر تغییر می‌کند:
/// <reference path="../typings/browser/ambient/core-js/index.d.ts" />
/// <reference path="../typings/browser/ambient/node/index.d.ts" />
د) به علاوه محتوای فایل‌های systemjs.config.js و index.html نیز تغییر یافته‌اند.

یک نکته: اگر در پوشه‌ی typings قدیمی شما هنوز فایل‌های es6-shim موجود هستند، باید آن‌ها را حذف کنید. چون تعاریف آن، با تعاریف core-js جدید، تداخل می‌کنند و خطای «error TS2300: Duplicate identifier» را دریافت خواهید کرد.

پوشه‌ی typings جدید را از اینجا دریافت کنید: typings.zip
‫۸ سال و ۴ ماه قبل، چهارشنبه ۲۹ اردیبهشت ۱۳۹۵، ساعت ۱۸:۲۵
ممنوع کردن ورود session id در آدرس

سایت‌های ASP.NET به یک چنین آدرس‌هایی پاسخ مثبت می‌دهند:
http://yourserver/folder/(session ID here)/
داخل پرانتز session id ذکر شده‌است و برای حالت cookie less است. حتی اگر استفاده‌ی از کوکی را اجباری کرده باشید، باز هم می‌توان آدرس فوق را درخواست داد و کار می‌کند (البته بدون تاثیر امنیتی است و پردازش نمی‌شود) ولی می‌تواند سبب بروز مشکل «وجود آدرس‌هایی با محتوای تکراری» در سایت شود.
برای ممنوع کردن یک چنین آدرس‌هایی می‌توان تنظیم ذیل را اضافه کرد:
    <rewrite>
      <rules>
        <rule name="Remove Session ID From URL" patternSyntax="ECMAScript" stopProcessing="true">
          <match url=".*" />
          <conditions>
               <add input="{CACHE_URL}" pattern="^(.+):\/\/(.+)\/\((.*)\)\/(.+)" />            
          </conditions>
          <action type="Redirect" url="https://www.dntips.ir/" redirectType="Permanent" />
        </rule>
      </rules>
    </rewrite>
‫۸ سال و ۴ ماه قبل، سه‌شنبه ۲۸ اردیبهشت ۱۳۹۵، ساعت ۱۹:۰۰
- در آینده‌ای نزدیک: «SQL Server on Linux»
- در هم اکنون: هاست سرور SQL در ویندوز و استفاده از آن در کلاینت‌های لینوکسی با SQL Client
- و یا اگر از یک ORM استفاده می‌کنید (مانند EF یا NH)، چون در این حالت کدهای شما وابستگی به بانک اطلاعاتی مورد استفاده ندارند، سوئیچ کردن به بانک‌های اطلاعاتی دیگر، ساده خواهد بود؛ مگر اینکه از قابلیت‌های ORM استفاده نکرده باشید و مستقیما SQL نویسی ویژه‌ی آن بانک اطلاعاتی خاص را انجام داده باشید. در غیر اینصورت (استفاده از ORM؛ بدون SQL نویسی مستقیم و ویژه)، حداکثر کاری که باید انجام دهید، تغییر پروایدرهای ابتدای برنامه است؛ بدون تغییری در کدهای اصلی برنامه