به صورت خلاصه:
لینک اصلی کتابخانه: https://www.nuget.org/packages/Twitter.Bootstrap.RTL.Less/3.0.0
لینک دانلود آن: https://www.nuget.org/api/v2/package/Twitter.Bootstrap.RTL.Less/3.0.0
Application Model 00:59:50
Metro and WinRT introduce some significant changes to the world in which applications execute.
This module describes the implications for developers.
Introduction
Application Lifecycle
Demo: Application Lifecycle
Managing State
Demo: Saving State
Splash Screens
Launching Applications
Application Manifest
Packaging
Summary
// در پایه مدلها public abstract class BaseViewModel { public IList<Post> Posts { get; set; } // خاصیت عمومی که قرار است در فایل مستر قابل دسترسی باشد } // در اکشن متد return View(model: new HomeViewModel { Posts = .... }); // در اینجا ویوومدل ارسالی از پایه مدلها مشتق میشود public class HomeViewModel : BaseViewModel
InMemoryWebApiModule.forRoot(ProductData, { delay: 1000 }),
{ path: 'products', component: ProductListComponent, data: { pageTitle: 'Product List'} },
this.pageTitle = this.route.snapshot.data['pageTitle'];
> ng g s product/ProductResolver -m product/product.module installing service create src\app\product\product-resolver.service.spec.ts create src\app\product\product-resolver.service.ts update src\app\product\product.module.ts
providers: [ProductService, ProductResolverService]
import { Injectable } from '@angular/core'; import { Resolve, ActivatedRouteSnapshot, RouterStateSnapshot, Router } from '@angular/router'; import { Observable } from 'rxjs/Observable'; import 'rxjs/add/operator/catch'; import 'rxjs/add/observable/of'; import 'rxjs/add/operator/map'; import { ProductService } from './product.service'; import { IProduct } from './iproduct'; @Injectable() export class ProductResolverService implements Resolve<IProduct> { constructor(private productService: ProductService, private router: Router) { } resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<IProduct> { let id = route.params['id']; if (isNaN(id)) { console.log(`Product id was not a number: ${id}`); this.router.navigate(['/products']); return Observable.of(null); } return this.productService.getProduct(+id) .map(product => { if (product) { return product; } console.log(`Product was not found: ${id}`); this.router.navigate(['/products']); return null; }) .catch(error => { console.log(`Retrieval error: ${error}`); this.router.navigate(['/products']); return Observable.of(null); }); } }
export class ProductResolverService implements Resolve<IProduct> {
resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<IProduct> {
import { ProductResolverService } from './product-resolver.service'; const routes: Routes = [ { path: 'products', component: ProductListComponent }, { path: 'products/:id', component: ProductDetailComponent, resolve: { product: ProductResolverService } }, { path: 'products/:id/edit', component: ProductEditComponent, resolve: { product: ProductResolverService } } ];
constructor(private route: ActivatedRoute) { } ngOnInit(): void { this.product = this.route.snapshot.data['product']; }
ngOnInit(): void { this.route.data.subscribe(data => { this.onProductRetrieved(data['product']); }); }
در صورتیکه فایلهای شما برای انشار نهایی آماده هستند، پروژه خود را در لیست سمت چپ برنامه انتخاب کنید تا در بالا و سمت راست برنامه، گزینهی Publish Repository دیده شود و با انتخاب آن، یک نام را که قبلا وارد کرده اید و یک توضیح مختصر را از شما میخواهد. به صورت پیش فرض انتشارها عمومی و رایگان هستند. در صورتی که اگر بخواهید این انتشار را تنها برای خود و به صورت احتصاصی انجام دهید، باید هزینه آن را پرداخت کنید.
در صورتیکه دوست دارید در پروژهای مشارکت داشته باشید، ابتدا پروژه مورد نظر را در سایت گیت هاب Fork کنید و سپس از طریق گزینهی Add در برنامه عمل کنید و اینبار در سربرگهای بالا، به جای Create گزینهی Clone را انتخاب نمایید. در این حالت لیستی از پروژههای Fork شده نمایش داده میشوند و با انتخاب هر کدام، پروژه بر روی سیستم شما کپی خواهد شد.
بعد از انتخاب گزینهی Clone، از شما محل ذخیرهی پروژه را خواهد پرسید و بعد از تایید آن، مقدار زمان کمی برای کپی کردن پروژه خواهد خواست. پس از آن لیستی از همهی تغییرات و مشارکتها به شما نمایش داده میشود و در صورتیکه دوست دارید به تغییری در قبل برگردید تا کارتان را از آن شروع کنید، میتوانید از گزینهی Revert استفاده کنید. برای یادگیری سایر اصطلاحات فنی گیت و گیتهاب میتوانید از مسیرهای آموزشی آن استفاده کنید.
حال با خیال راحت روی پروژه کار کنید و تغییرات را روی آن اعمال کنید و بعد از اینکه کارتان تمام شد، دوباره به برنامه باز گردید و پروژه را در لیست انتخاب کرده و در سمت راست بالای صفحه، گزینهی Sync Now را انتخاب کنید تا مشارکت جدید شما به سیستم گیت هاب اعمال شود و حالا اگر به صفحهی پروژه در سایت گیت هاب بروید، میبینید که شما به عنوان یک مشارکت کنندهی جدید اضافه شدهاید. پس با هر بار تغییر نسخهی پروژه میتوانید آن را با سیستم گیت سینک نمایید.
گزینهی تنظیمات که در کنار عبارت Sync Now قرار دارد و با رنگ آبی در شکل مشخص شده است نیز به شما اجازهی تغییر فایلهای تنظیماتی از قبیل gitignore یا gitattribute را میدهد.
در صورتی که برای پروژهای در گیت هاب شاخهها یا branches تعریف شده باشند، در اینجا هم میتوانید شاخهی مورد نظر را انتخاب کنید: