写在前面

前端框架完全不懂。

看着angular中文官网的英雄编辑器教程和核心知识,用偷懒的类比法,从flask django的角度 记录一下自己对angular的理解。

作为工科的武曲,自己的体会是:

不要被生命周期钩子(lifecycle hook)、承诺(Promise)、provider……之类的名词吓倒。

(我挺讨厌这样刻意发明很多概念和名词的语言和文风,像学究炮制论文,不像工程师的语言风格。。。)

要快速学一个完全陌生的语言和框架,要

强迫自己不去关注这些概念名词的内涵与定义,而是直接去熟悉这些概念名词的用法和可类比的地方

要敢于直接下载运行demo,硬着头皮看它是怎么回事,直接开干。

和玩兵棋一样,手册、概念看着唬人,往往最后发现是无聊的或者是错的。

应该最短时间先玩起来再说。

类似的:

  在python里,可以不需要知道__init__(self)是不是构造函数,反正当构造函数来用;

  在unity3d里不需要纠结Awake() Start()该叫什么名,反正大概知道该塞什么进去就OK了。

蒙着用起来之后,回头看,梳理一下“新”名词、“新”概念:

1能类比到自己熟悉的概念和机制上的,打磨老熟概念,忘掉新概念;

2不能类比的,确实觉得另类的,整理出来。

形成“熟的内核(道与术)+生的零碎技巧(技)”的技能架构,或者“属+种差”的概念结构

因为

软件工程的世界里,没有那么多新概念,新范畴的发明创造。

技术发展快的好处是:

新的、主流的框架,一定是互相借鉴、吸收各种经典、流行的模式与实践。

所以,

每个领域真的熟悉1种框架的机制与模式就可以了。

再学“新”的语言、框架,非常容易。

对比一下典型的flask工程(https://github.com/imwilsonxu/fbone)和angular的demo英雄编辑器(https://www.angular.cn/tutorial/toh-pt5

app.module.ts

这个文件有点类似extends.py 和app.py的混合。

1 类似extends.py 在这里import各种依赖的插件。比如要双向绑定,就要import  FormsModule

import { NgModule }      from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { FormsModule } from '@angular/forms'; // <-- NgModel lives here import { AppComponent } from './app.component'; @NgModule({
imports: [
BrowserModule,
FormsModule // <-- import the FormsModule before binding with [(ngModel)]
],

2类似app.py   在这里declarations里添加其他的component,类似 注册蓝图

每个组件都必须在一个(且只有一个)Angular模块中声明。

import { NgModule }       from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { FormsModule } from '@angular/forms'; import { AppComponent } from './app.component';
import { DashboardComponent } from './dashboard.component';
import { HeroDetailComponent } from './hero-detail.component';
import { HeroesComponent } from './heroes.component';
import { HeroService } from './hero.service'; import { AppRoutingModule } from './app-routing.module'; @NgModule({
imports: [
BrowserModule,
FormsModule,
AppRoutingModule
],
declarations: [
AppComponent,
DashboardComponent,
HeroDetailComponent,
HeroesComponent
],

providers: [ HeroService ],
bootstrap: [ AppComponent ]
})
export class AppModule { }

类似

from flask import Flask

from scenario import scenario
from situation import situation
from posture import posture
from assistant import assistant
from do_action import do_action
from rule import rule # ————————注册blueprint————————
app.register_blueprint(scenario)
app.register_blueprint(situation)
app.register_blueprint(posture)
app.register_blueprint(do_action)
app.register_blueprint(assistant)
app.register_blueprint(rule)
app = Flask(__name__)

app.component.ts

AppComponent 类似

app = Flask(__name__)

里的app.

AppComponent将会变成一个简单的壳,用来作为那些子组件的宿主。

 

Template部分

和jinja2不一样的地方摘录点

let是jsXX标准新加的关键字表示局部变量。*ngFor是微语法。(感觉搞半天,还是不如python -_-!)

<li *ngFor="let hero of heroes">
<span class="badge">{{hero.id}}</span> {{hero.name}}
</li>

NgFor 微语法

赋值给*ngFor的字符串不是模板表达式。 它是一个微语法 —— 由 Angular 自己解释的小型语言。在这个例子中,字符串"let hero of heroes"的含义是:

  取出heroes数组中的每个英雄,把它存入局部变量hero中,并在每次迭代时对模板 HTML 可用

Angular 把这个指令翻译成了一个<ng-template>包裹的宿主元素,然后使用这个模板重复创建出一组新元素,并且绑定到列表中的每一个hero

用 *ngIf 判断是否为空

<div *ngIf="selectedHero">

加click

<li *ngFor="let hero of heroes" (click)="onSelect(hero)">
...
</li>

从flask视角学习angular(一)整体对比的更多相关文章

  1. 从flask视角理解angular(二)Blueprint VS Component

    Component类似flask app下面的每个blueprint. import 'rxjs/add/operator/switchMap'; import { Component, OnInit ...

  2. 从flask视角理解angular(四)Route

    app-routing.modules.ts import { NgModule } from '@angular/core'; import { RouterModule, Routes } fro ...

  3. 从flask视角理解angular(三)ORM VS Service

    把获取模型数据的任务重构为一个单独的服务,它将提供英雄数据,并把服务在所有需要英雄数据的组件间共享. @Injectable() export class HeroService { getHeroe ...

  4. 读Flask源代码学习Python--config原理

    读Flask源代码学习Python--config原理 个人学习笔记,水平有限.如果理解错误的地方,请大家指出来,谢谢!第一次写文章,发现好累--!. 起因   莫名其妙在第一份工作中使用了从来没有接 ...

  5. 学习angular 指令构造器时遇到的小问题

    在学习angular时,使用模块来为应用添加自己的指令时,遇到了一个问题,演示的代码如下: <!DOCTYPE html> <html> <head> <me ...

  6. Flask框架学习笔记(API接口管理平台 V1.0)

    今天博主终于完成了API接口管理平台,最后差的就是数据库的维护, 博主这里介绍下平台的设计原理,首先基于python,利用flask的web框架+bootstrap前端框架完成,先阶段完成了前台展示页 ...

  7. python flask框架学习(二)——第一个flask程序

    第一个flask程序 学习自:知了课堂Python Flask框架——全栈开发 1.用pycharm新建一个flask项目 2.运行程序 from flask import Flask # 创建一个F ...

  8. vue、react、angular三大框架对比 && 与jQuery的对比

    前端当前最火的三大框架当属vue.react以及angular了. 但是在做项目的时候,我们怎么去选择呢?  这里做一个比较,希望大家可以有一个比较清晰的认识. vue与react vue和react ...

  9. Python Flask 开发学习笔记

    Flask学习 安装pipenv虚拟环境 pip Install pipenv 运行pipenv pipenv --version 进入虚拟容器 pipenv install 安装flask pipe ...

随机推荐

  1. django外使用django ORM

    import os, sys import django BASE_DIR = os.path.dirname(os.path.abspath(__file__)) # 定位到你的django根目录 ...

  2. K8S学习笔记之CentOS7集群使用Chrony实现时间同步

    0x00 概述 容器集群对时间同步要求高,实际使用环境中必须确保集群中所有系统时间保持一致,openstack官方也推荐使用chrony代替ntp做时间同步. Chrony是一个开源的自由软件,像Ce ...

  3. mysql误删数据快速恢复

    相信后端研发的同学在开发过程经常会遇到产品临时修改线上数据的需求,如果手法很稳那么很庆幸可以很快完成任务,很不幸某一天突然手一抖把表里的数据修改错误或者误删了,这个时候你会发现各种问题反馈接踵而来.如 ...

  4. jQuery实现全选与全不选功能

    初始时: 实现功能后: 实现该功能的核心代码: <script> $(function(){ $("#selectBtn").click(function(){ con ...

  5. Apache正向代理和反向代理

    一.正向代理 先说一正向代理(Forward Proxy),通常普通用户使用的比较多的,是正向代理.也就是在浏览器的网络连接属性框中,填写上一个代理服务器的ip和端口,即可通过代理服务器中转,去浏览网 ...

  6. NATS—协议详解(nats-protocol)

    NATS的协议是一个简单的.基于文本的发布/订阅风格的协议.客户端连接到 gnatsd(NATS服务器),并与 gnatsd 进行通信,通信基于普通的 TCP/IP 套接字,并定义了很小的操作集,换行 ...

  7. oracle基础——内存管理、优化

    内存图解: 自动管理:11g:AMM   10g:ASMM SGA(system global area):由所有服务进程和后台进程共享 PGA(program global area): 由每个服务 ...

  8. ajax,分页器

    一.ajax请求数据 ''' $.ajax({ url: '/ajax/', # 请求路径 type: 'post', # 请求方式 data: { # get和post都以data字典方式携带数据 ...

  9. CSS的再深入(更新中···)

    在上一章我们提到了一个新的概念,叫做块级样式,讲到这里就要科普一下: 标签又分为两种: (1)块级标签 元素特征:会独占一行,无论内容多少,可以设置宽高··· (2)内敛标签(又叫做行内标签) 元素特 ...

  10. 【做题】TCSRM592 Div1 500 LittleElephantAndPermutationDiv1——计数&dp

    题意:定义函数\(f(A,B) = \sum_{i=1}^n \max(A_i,B_i)\),其中\(A\)和\(B\)都是长度为\(n\)的排列.给出\(n\)和\(k\),问有多少对\((A,B) ...