نظرات مطالب
React 16x - قسمت 16 - مسیریابی - بخش 2 - پارامترهای مسیریابی
در صورتیکه قرار باشه یکی از کامپوننت‌های محصور شده در کامپوننت Route به صورت پیشفرض رندر باشه چه راهکاری وجود داره؟
const Dashboard = ({ match }) => {
  return (
    <div>
      <h1>Admin Dashboard</h1>
      <div className="row">
        <div className="col-3">
          <SideBar />
        </div>
        <div className="col">
          <Route path="/admin/users" component={Users} />
          <Route path="/admin/posts" component={Posts} />
        </div>
      </div>
    </div>
  );
};
نظرات مطالب
React 16x - قسمت 33 - React Hooks - بخش 4 - useContext Hook
- بله. ()React-Redux connect دقیقا در پشت صحنه از همین Context API استفاده می‌کند. تفاوت این دو مانند مقایسه‌ی صرفا داشتن یک API ابتدایی (Context API) و داشتن یک کتابخانه‌ی غنی بنا شده‌ی بر اساس یک API هست (React-Redux) .
+ یک هوک دیگر به نام useReducer Hook هم به لیست هوک‌های استاندارد React اضافه شده که که در حقیقت زیرساخت useState است و کارش فراهم آوردن مدیریت حالت پیشرفته‌ای مخصوص یک کامپوننت است. البته جایگزین Redux که سراسری عمل می‌کند نیست.
برای مطالعه‌ی بیشتر: Redux vs. The React Context API 
نظرات مطالب
بررسی برخی تغییرات در Angular 8
در نگارش 8 انگیولار، در زمان تعریف ViewChild@ و ContentChild@، اجبار است که یک static flag را مشخص کنیم. در صورتیکه مقدارش true باشد، انگیولار تلاش خواهد کرد که در زمان initialization کامپوننت، آن را پیدا کند (مثلا ngOnInit) و زمانیکه مقدار آن false باشد، انگیولار بعد از initialization مربوط به View، آن را پیدا خواهد کرد.  
قبل از نگارش 8 انگیولار:
@ViewChild(‘input1’) demoInput:ElementRef;

getValueOfElement(){  
   Console.log(this.demoInput.nativeElement.value);  
}
  نگارش 8 انگیولار:
@ViewChild(‘input1’,{ static : false }) demoInput:ElementRef; 
getValueOfElement(){  
   Console.log(this.demoInput.nativeElement.value);  
}
برای  ViewChildren@ و ContentChildren@  نیازی به تعریف static flag نیست.  
همانطور که در متن هم ذکر شده‌است، دستور ng update، عمل تبدیل مسیرهای loadChildren را به syntax جدید، به طور خودکار انجام می‌دهد؛ ولی برای ViewChild@ و ContentChild@ تغیری صورت نمی‌گیرد و باید به صورت دستی انجام گیرد. 
نظرات مطالب
مدیریت سراسری خطاها در یک برنامه‌ی Angular

خطا به صورت رشته ارسال نمیشه . نوع error رو ببینید


 و نحوه فراخوانی به صورت زیر است 

در کامپوننت

 this.dynamicGridService.getMasters(queryModel).subscribe(res => {

      console.log(res);
      this.data = res;

    });

سرویس:

 return this.labApiService.get(`Master/GetMasterColumns`).pipe(
      map(response => response));

سرویس اصلی

 get(url: string): Observable<any> {

    return this.http
      .get<any>(url)
      .pipe(
      map(response => response || {}),
      catchError(this.handleError));
    
  }
 public handleError(error: HttpErrorResponse): Observable<any> {
    console.error("observable error: ", error);
    return observableThrowError(error);
  }

اما باز هم متن اصلی خطارو نشون نمیده 

نظرات مطالب
احراز هویت و اعتبارسنجی کاربران در برنامه‌های Angular - قسمت دوم - سرویس اعتبارسنجی
- سازنده‌ی کلاس سرویس Auth هست که کار اطلاع رسانی به کامپوننت هدر را انجام می‌دهد. علت قرار گرفتن این قطعه کد، در هدر هم دقیقا اجرای آن با ریفرش صفحه است. بنابراین این قسمت و همچنین مشترکین به BehaviorSubject آن‌را بررسی کنید:
 constructor() {
    this.updateStatusOnPageRefresh();
  }
- اگر با وجود مقادیر token در کش مرورگر، این مقادیر کار نمی‌کنند، نیاز به پیاده سازی «نکته‌ی مهم: نیاز به دائمی کردن کلیدهای رمزنگاری سمت سرور» را دارید. ری استارت برنامه = تولید کلیدهای رمزنگاری جدید = غیرمعتبر شدن اطلاعات سمت کاربر و برگشت خوردن آن‌ها در سمت سرور
نظرات مطالب
شروع به کار با AngularJS 2.0 و TypeScript - قسمت هشتم - دریافت اطلاعات از سرور
- خواص را از شیء json دریافت و دستی نگاشت کنید:
export class Book {
    constructor(
        public id,
        public title:string,
        public pages:Array
    ){}
}

return this._http.get('getBook/1')
    .map(function(res){
        var data = res.json();
        return new Book(data.id, data.title, data.pages);
    })
- این مورد بیشتر بحث طراحی سرویس‌ها و جداسازی وظایف هست (و یک best practice). می‌توانید کلا کلاس سرویس را حذف کنید و تمام عملیات مرتبط را داخل همان کامپوننت هم مدیریت کنید. اما در +Angular2، مرسوم است کار طراحی لایه کار با HTTP، در یک کلاس سرویس مجزا انجام شود و استفاده کننده‌ها در کامپوننت‌ها، مشترک آن شوند.
نظرات مطالب
معرفی Kendo UI
بله امکان استفاده از wrapper در نسخه asp.net.mvc.commercial وجود دارد
استفاده از اون هم خیلی ساده‌تر و خواناتر از جاوا اسکریپت هست. نظر آفای نصیری هم محترم است ولی در مواقع خواص میتونید همزمان هم از جاوااسکریپت استفاده کنید هم از wrapper یک نمونه رو در زیر با هم مقایسه میکنیم
با استفاده از جاوا اسکریپت
<input id="pickDate" type="text"/>

<script type="text/javascript">
  $(function() {
        $("#pickDate").kendoDatePicker();
  });
</script>
با استفاده از wrapper
@(Html.Kendo().DatePicker().Name("pickDate"))
در ضمن اینکه توی  wrapper امکان استفاده از Intellisense و امکان تعریف ارتباط اغلب کامپوننت‌های وب به مدل با استفاده از for‌های نمونه معادل کامپوننت فراهم شده است مانند wrapper زیر
@(Html.Kendo().DatePickerFor(m => m.HireDate).Name("pickDate1"))

نظرات مطالب
کنترل DatePicker شمسی مخصوص Silverlight 4
جناب آقای نصیری من هر روشی که میتونستم امتحان کردم تا از این کامپوننت توی پروژه VB.Net 2010 خودم استفاده کنم ولی نشد.
ممکنه یکبار نحوه استفاده رو توی wpf کامل توضیح بدید؟
من این کارهارو می‌کنم:
1 - add>usercontrol> wpf
2- add کردن dll به toolBox
3- drag کردن pdatepicker توی usercontrol و rebuild کلی پروژه
4- اضافه کردن elementhost به فرم
5- انتخاب usercontrol به elementhost

موقع اجرا تقویم رو توی فرم نشون میده ولی وقتی می‌خوام تاریخ رو ازش انتخاب بکنم
Error:
object reference is not set to an object
use new keyword ....


نظرات مطالب
شرح حال ابزارهای گزارشگیری موجود
در مورد این iTextSharp نمی دونم اما با ابزارهای کزارش سازی زیادی کار کردم، منجمله CrystalReport, FastReport, Telerik Reporting, QuickReport و چند تا دیگه
اما هیچ کدوم به پای DevExpress XtraReports نمی رسند! این رو بدون اغراق می گم. تنها مشکلش عدم پشتیبانی از راست به چپ هست که چون مشتریش کمه برا راست به چپ پیاده سازی نمی کنند.

واقعا اگر امکانش بود قیمت یک میلیونیش رو هم می دادیم.
با استفاده از این کامپوننت یک برنامه گزارش سازی پویا تهیه کردم، امکاناتی که اون می داد فراتر از اونی هستند که تا حالا دیده بودم.

اما ابزارهای گزارش گیری اوپن سورس شاید زمان زیادی لازم باشه تا به قدرت ابزارهای تجاری برسند. البته این نظر منه.
مطالب
پیاده سازی پروژه‌های React با TypeScript - قسمت هشتم - تعیین نوع کامپوننت‌های کلاسی
با ارائه‌ی React Hooks، استفاده‌ی از کامپوننت‌های کلاسی، کمتر و کمتر شده‌اند. اما جهت تکمیل و خاتمه‌ی سری جاری، این نوع را نیز در این قسمت بررسی می‌کنیم.


تعیین نوع props و state در کامپوننت‌های کلاسی

برای این منظور ابتدا فایل جدید src\components\BigC.tsx را ایجاد کرده و سپس توسط میانبر rcc، ساختار ابتدایی این کامپوننت را ایجاد می‌کنیم. در ادامه آن‌را در کامپوننت src\App.tsx استفاده خواهیم کرد:


یکی از مزایای دیگر کار با تایپ‌اسکریپت، فعال شدن intellisense مرتبط با افزونه‌هایی مانند typescript hero و auto import است که نمونه‌ای از آن‌را در تصویر فوق مشاهده می‌کنید. فقط کافی است نام المان مرتبط را نوشت و سپس با استفاده از افزونه‌های یاد شده، به صورت خودکار import آن‌را اضافه کرد.

پس از افزودن المان این کامپوننت، اگر سعی کنیم یک props را برای آن تعریف کنیم، بلافاصله خطای تعریف نشده بودن آن‌را دریافت خواهیم کرد:


در اینجا نیز همانند کامپوننت‌های تابعی، باید ابتدا نوع Props را تعیین کرد و تنها تفاوت آن، روش معرفی این type جدید به کامپوننت است:
import React, { Component } from "react";

type Props = {
  title: string;
};

type State = {
  status: string;
};

export default class BigC extends Component<Props, State> {
  render() {
    return (
      <div>
        <h1>I'm in a class component</h1>
      </div>
    );
  }
}
در کامپوننت‌های کلاسی، نوع State و نوع Props، از طریق آرگومان‌های جنریک Component، به نحوی که مشاهده می‌کنید، مشخص می‌شوند.
مابقی نکات آن مانند props اختیاری و غیره، تفاوت خاصی را با کامپوننت‌های تابعی که پیشتر بررسی کردیم، ندارند و یکی هستند.


مقایسه‌ای بین Types و Interfaces

در این سری بیشتر از types استفاده شد، تا اینترفیس‌های تایپ‌اسکریپت. برای مثال بجای نوع زیر:
type State = {
   rValue: boolean;
};
می‌توان از اینترفیس معادل آن نیز استفاده کرد:
interface State {
  rValue: boolean;
}
اما از کدامیک باید استفاده کرد؟
در تایپ‌اسکریپت، از type بیشتر برای تعریف یک نوع جدید استفاده می‌شود، اما از اینترفیس‌ها برای تعریف موجودیت‌ها و entities. برای مثال از type می‌توان برای تعریف نامی برای نوع‌های primitive, union, intersection نیز استفاده کرد، اما اینترفیس‌ها همواره برای تعیین نوع اشیاء مورد استفاده قرار می‌گیرند. نمی‌توان دو نوع هم‌نام را تعریف کرد، اما اگر دو اینترفیس هم نام را تعریف کنید، با هم یکی می‌شوند. نوع‌ها برخلاف اینترفیس‌ها قابلیت پیاده سازی نداشته و بیشتر جنبه‌ی یک اعلان را دارند و ... در نهایت استفاده‌ی از هر کدام بیشتر یک انتخاب شخصی است.


منابع تکمیلی

یکی از بهترین منابع تکمیلی استفاده‌ی از TypeScript در React، مخزن کد react-typescript-cheatsheet است که به همراه مجموعه‌ای از نکات مرتبط است.