Angularjs学习笔记(一)软件设计的基本原则和MVC设计模式

本文探讨软件设计的基本原则,如避免重复、KISS、YAGNI等,并深入讲解设计模式及其在AngularJS中的应用。AngularJS作为一款强大的前端框架,采用MVC设计模式,支持双向数据绑定、依赖注入及模块化设计,适用于数据驱动的SPA应用。

1、软件工程——软件设计原则

  (1)避免重复原则(只要用得到Ctrl+c和Ctrl+v的就算)

  (2)KISS原则,代码越简单越傻瓜越好(因为要注重团队意识)

  (3)YAGNI原则,不创建不需要的代码(严格遵守客户需要,不创建不必要的功能)

  (4)开闭原则,不让别人修改自己的代码,但可以扩展它

  (5)单一责任原则(例如在Bootstrap中每一层div包含不同功能的class)

  (6)高聚合低耦合原则,组件内部的逻辑关系越紧密越好,组件和组件之间关系越少越好。(angularjs的模块化设计就是遵循此原则)

  (7)最少知识法则/迪米特法则,例如司机不必知道如何造汽车。(在一个模块或函数中只有本身需要的东西)

 

 

2、软件工程——设计模式

    象棋(马走日象走田) => 基本套路(双炮枪/马后炮)

||     ||

     js(对象/原型/闭包) =>       设计模式   =>      设计框架

  设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。

  共23+1种设计模式

+1的那种设计模式:MVC模式(现在特别常见的设计模式,也是angularjs的设计模式)

  

3、MVC设计模式

  MVC模式根据逻辑关系,把前端项目的代码分为三个层次:

  (1)Model:模型,就是业务数据,前端项目中就是JS变量;

  (2)View:视图,就是业务数据在用户面前的展现,前端项目中就是HTML

  (3)Controller:控制器,负责业务数据的增删改查,前端项目中就是function

 

4、AngularJS概述

AngularJS诞生于2009年,由Misko Hevery 等人创建,后为Google所收购。所有的操作思路都以“业务数据”为关注点,彻底颠覆了传统的DOM操作。适用于以数据的CRUD(增删改查)操作为主的SPA应用。

 

 

5、面试题:AngularJS的四大特性

  (1)MVC设计模式

  (2)双向数据绑定

  (3)依赖注入

  (4)模块化设计  例如帮助手册:

 

注:i18n:   internationalization  国际化,Web项目若可以实现见中国人呈现汉语,见英国人呈现英语。

 

6、如何使用angularjs(angularjs简写为an)

  引入angular.js文件即可

 

7、Angular表达式(前提ngApp启动)

  语法:{{ 表达式 }}

  含义:Angular会计算表达式的值,输出在当前位置。

 

8、Angular表达式可以执行哪些运算

  1. 算数运算?   + - * / %    都可以,唯独不能自增/自减
  2. 比较运算? > < 都可以
  3. 逻辑运算? && || !        都可以
  4. 三目运算? ?: 可以
  5. 调用字符串对象的成员方法? 可以
  6. 使用直接量表示法创建对象? 可以
  7. 可以使用数组吗? 可以
  8. 使用new关键字创建对象? 不可以!不允许使用new和var关键字
  9. 调用ES全局函数? 不可以!

 

 

9、ng模块提供的指令(directive)

  (1)ngApp:启动一个Angular应用——只有Angular应用中的表达式才会被Angular执行。

用法: <ANY ng-app>

注意:angular应用的范围仅限于声明它的元素范围;且默认情况下一个HTML中不允许声明多个ngApp元素。

  (2)ngInit:声明模型变量(Model)——不是局部变量(违背MVC设计原则,尽量不用)

用法: <ANY ng-init="变量名=值; 变量名=值;">

注意:ngInit声明变量不能声明var关键字!声明的变量可以在Angular表达式中进行输出

  (3)ngBind: 计算一个表达式的值,输出为当前元素的innerHTML

用法: <ANY ng-bind="表达式"></ANY>

<ANY class="ng-bind: 表达式;'></ANY>

     例:<div  ng-init="age=20;"></div>
         <p ng-bind="age+5"></p>
         <p class=”ng-bind:age*5;”></p>

 

说明:ngBind指令作用与{{}}表达式基本类似,只是可以防止用户在一瞬间看到{{}}。ngBind指令计算完成表达式的值,会替换当前元素的innerHTML.

  (4)ngController:调用Controller创建函数,实例化一个控制器对象,指定其作用范围

用法: <ANY ng-controller="控制器名">...</ANY>

  (5)ngRepeat:用于在View实现循环输出

用法: <ANY ng-repeat="变量名 in 集合对象"></ANY>

含义:对于集合对象中的每一个元素,依次赋值给指定的变量名,对每次赋值都输出一遍当前元素。

  (6)ngIf:用于在View实现判断输出,为false就不输出了

用法: <ANY ng-if="布尔表达式">

含义: 若布尔表达式为true则输出当前元素;否则当前元素在DOM树不存在

      <div ng-if=”isIPO”>仅为真时可见</div>

 

10、AngularJS中声明模型数据的方式

  (1)使用ngInit指令来声明Model数据

<ANY ng-init="变量名=值;">

说明:此方式将Model声明在View中,严重违反了MVC模型的分工,不推荐使用

  (2)使用Controller对象创建Model数据——符合MVC模型分工

新版本的AngularJS中创建Model的语法:

ngApp=>Module=>Controller=>Model

  1. 声明一个AngularJS的应用程序: ngApp
  2. 创建一个自定义的模块: angular.module('模块名', [依赖列表])
  3. 在应用中注册自定义模块:  ng-app="模块名"
  4. 在模块中声明Controller函数
  5. 在View中指定Controller对象的作用范围——调用控制器创建函数
  6. 在Controller中声明Model数据

 

使用Controller创建Model数据:

创建一个新的HTML页面,声明一个ngApp,创建一个模块,其中声明一个控制器,创建一个Model数据,在View中显示这些数据:

 

<!DOCTYPE html>
<!--ng-app启动一个Angular应用并注册一个模块-->
<html lang="en" ng-app="myModule5">
<head>
  <meta charset="UTF-8">
  <!--引入bootstrap.css文件-->
  <link rel="stylesheet" href="css/bootstrap.css">
  <title></title>
</head>
<body>
<div class="container">
  <h1>练习:使用Controller创建Model,在View中加以显示</h1>
  <!--启动一个控制器并规定作用范围-->
  <div ng-controller="myCtrl5">
    <!--视图-->
    <p>{{empCount}}</p>
  </div>
  </div>
    <!--引入angular.js文件-->
    <script src="js/angular.js"></script>
    <script>
      // 用angular.module定义一个组件后边是所依赖的模块
        angular.module('myModule5', ['ng']).
        controller('myCtrl5', function($scope){// 用controller定义一个控制器,控制器中函数是对业务数据的函数操作
            //在Controller中声明Model数据
            $scope.empCount = 1000;
        });
    </script>
</body>
</html>

 

 

11、AngularJS在项目中的优缺点是什么?

 

 

 

 

 

 

 

 

 

内容概要:本文系统介绍了算术优化算法(AOA)的基本原理、核心思想及Python实现方法,并通过图像分割的实际案例展示了其应用价值。AOA是种基于种群的元启发式算法,其核心思想来源于四则运算,利用乘除运算进行全局勘探,加减运算进行局部开发,通过数学优化器加速函数(MOA)数学优化概率(MOP)动态控制搜索过程,在全局探索与局部开发之间实现平衡。文章详细解析了算法的初始化、勘探与开发阶段的更新策略,并提供了完整的Python代码实现,结合Rastrigin函数进行测试验证。进步地,以Flask框架搭建前后端分离系统,将AOA应用于图像分割任务,展示了其在实际工程中的可行性与高效性。最后,通过收敛速度、寻优精度等指标评估算法性能,并提出自适应参数调整、模型优化并行计算等改进策略。; 适合人群:具备定Python编程基础优化算法基础知识的高校学生、科研人员及工程技术人员,尤其适合从事人工智能、图像处理、智能优化等领域的从业者;; 使用场景及目标:①理解元启发式算法的设计思想与实现机制;②掌握AOA在函数优化、图像分割等实际问题中的建模与求解方法;③学习如何将优化算法集成到Web系统中实现工程化应用;④为算法性能评估与改进提供实践参考; 阅读建议:建议读者结合代码逐行调试,深入理解算法流程中MOA与MOP的作用机制,尝试在不同测试函数上运行算法以观察性能差异,并可进步扩展图像分割模块,引入更复杂的预处理或后处理技术以提升分割效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值