利用 Web 技术构建跨平台原生 App 应用程序。
在原生 App 中嵌套一个轻量化的浏览器,然后通过 Web 技术开发并实现部分原生功能。
双向数据绑定;
依赖注入
测试友好;
兼容性好
利用数据绑定和依赖注入可以简化大量代码
AngularJS: JavaScript 框架;
ionic: 基于 AngularJs 的移动开发框架,提供了大量 UI、样式和交互效果, 并作为网页的容器, 简化了程序开发过程;
Cordova: 将项目编译并打包成原生 App
var app=angular.module('demo.main',[]);
‘demo.main’: 定义该模块的名字;
[]: 指定依赖的其它模块的名字, 为空表示没有依赖
AngularJS 的作用域是一个 “数据仓库”,由JavaScript 对象组成。作用域 (
$scope
) 是控制器回调函数的参数,当定义一个控制器被时,就产生了一个作用域。作用域中有属性和方法,可在视图和控制器中使用。
将根作用域作为 控制器回调函数 的 参数 传入,即可在控制器中获取根作用域。
AngularJS 指令的实质是绑定在 DOM 元素上的函数,在该函数内部可以操作 DOM、调用方法、定义行为、绑定控制器对象等。
当视图(或模型)发生改变时,会自动更新模型(或视图),以实现两边数据的同步
高内聚:指组件内部实现了它应该包含的功能
低耦合:指外部组件尽量减少相互依赖
如何提高:使用组件型指令,将应用程序拆分成小而独立的组件,每个组件都有清晰的指责和界限。
用于设置表单控件 input、select 或 textarea 的 disabled 属性
- ng-change
- ng-click
- ng-dblclick
- ng-mousedown
- ng-mouseenter
- ng-mouseleave
- ng-mousemove
- ng-mouseover
- ng-mouseup
- ng-submit
使用ng-repeat指令的基本语法如下:
<div ng-repeat="item in items"> {{ item }} </div>
取值为 M 表示以注释的方式做标记,在实际开发中容易被团队中其他成员当成普通注释误修改,不利于团队协作。
在AngularJS中$scope对象充当了ViewModel的角色,它将 Model 与 View 进行绑定,并负责处理视图的交互和业务逻辑,使得开发者能够更好地组织和管理应用程序的代码。
加载HTML
加载angular.js文件
启动AngularJS代码
确定AngularJS程序边界
配置$injector(注入器)
渲染页面
// demo.js
app.controller('MainCtrl', function($scope) {
$scope.people = [
{name: '费里', sex: '男'},
{name: '艾迪', sex: '女'},
]});
<ul>
<li ng-repeat="person in people">
{{person.name}} - {{person.sex}}
li>
ul>
错 ???
在上述代码中,当应用启动后,会产生一个$watch。该$watch会监视$scope对象中的people数组,并在其发生变化时进行更新。
具体来说,当应用启动后,AngularJS会解析HTML模板,并创建一个ng-repeat指令的实例。该指令会创建一个$watch,用于监视$scope对象中的people数组的变化。
由于ng-repeat指令会遍历people数组,并为每个数组元素创建一个独立的作用域,因此在这个例子中,会生成两个ng-repeat实例和两个独立的作用域。
因此,总共会产生一个$watch,用于监视people数组的变化。每当people数组发生变化时(例如添加或删除元素),AngularJS会更新相应的DOM元素来反映这些变化。
在AngularJS中,$apply()函数的作用是手动触发脏检查(digest cycle),将数据的变化同步到视图。通常在异步操作执行后手动调用。
行内式注入声明
显示注入声明
推断式注入声明
factory():使用对象工厂函数定义服务,该方法返回一个函数或对象作为服务的实例;
service():使用类构造函数定义服务,通过 new 操作符创建服务实例;
provider():使用一个具有$get()的构造函数定义服务,然后使用模块的provider()函数进行登记,返回服务实例;
constant():使用一个常量定义服务,这个常量就是服务实例;
value():使用一个值定义服务,这个值就是服务实例。
在AngularJS中,可以使用以下几种方式来创建服务:
- Factory(工厂):使用
factory
方法创建服务,该方法返回一个函数或对象作为服务的实例。工厂函数可以包含任意的逻辑和依赖注入,最终返回一个对象或函数,作为服务的实例。示例代码如下:app.factory('myService', function() { var serviceInstance = { // 服务的方法和属性 }; return serviceInstance; });
- Service(服务):使用
service
方法创建服务,该方法定义一个构造函数,并通过new
关键字实例化该构造函数。服务对象会被当作单例在应用的整个生命周期中共享。示例代码如下:app.service('myService', function() { this.someMethod = function() { // 服务的方法实现 }; });
- Provider(提供者):使用
provider
方法创建服务,该方法返回一个提供者对象,该对象可以定义$get
方法来实例化服务。Provider可以在应用启动之前进行配置,可以注入配置参数到服务中。示例代码如下:app.provider('myService', function() { var configValue = 'default'; this.setConfigValue = function(value) { configValue = value; }; this.$get = function() { var serviceInstance = { // 服务的方法和属性 }; return serviceInstance; }; });
- Constant(常量):使用
constant
方法创建常量,常量在整个应用中都是可用的,无需注入即可使用。常量一旦定义,其值不能被修改。示例代码如下:app.constant('myConstant', 'some value');
这些方式都可以创建可供应用程序使用的服务,并且在不同的场景下有不同的用途和灵活性。开发者可以根据需求选择合适的方式来创建和使用服务。
app.provider('myService', myFunction);
// 使用config()函数配置服务
app.config(function (【】) {
myServiceProvider.changeName('张三');
});
参数:“myServiceProvider”
原因:AngularJS规定服务提供者provider对象在注入器中的登记名称是“服务名称+Provider”,且必须以“Provider”结尾,否则AngularJS将无法识别。
在给定的代码中,
myService
是通过app.provider
方法创建的服务,myFunction
是一个提供者函数,用于实例化服务。在
config()
函数中,需要注入myServiceProvider
作为参数。myServiceProvider
是由AngularJS自动注入的提供者对象,它可以用于配置服务实例之前的一些配置操作。补全后的代码如下所示:
app.config(function (myServiceProvider) { myServiceProvider.changeName('张三'); });
var myFunction = function() {
return {}
};
var app=angular.module('myModule',[]);
app.factory('myService',myFunction);
要将使用
factory()
函数创建服务的方式修改为使用provider()
函数创建服务的方式,需要进行以下修改:var myFunction = function() { return {}; }; var app = angular.module('myModule', []); app.provider('myService', function() { this.$get = function() { return myFunction; }; });
区别是在定义阶段 factory() 将定义函数的返回对象作为服务对象,service()是将构造函数实例本身作为服务对象,在使用阶段两个函数没有区别。
在 HTML 中引入 angular.js和 angular-router.js
创建主应用模块的依赖模块 ngRoute 模块
在 HTML 中使用 ng-view 指令
在主应用的 config() 函数中配置 $routeProvider 的路由规则
三段式布局:将用户界面划分为三块区域,Header(头部,总是占据屏幕顶部)、Content(内容,占据剩余空间)、Footer(底部,总是占据屏幕底部)
ionic列表中可以包含基本的文字、按钮、开关、图标和缩略图等。
在Ionic列表中,可以包含以下内容:
文本(Text):可以在列表项中显示文本内容,如标题、描述、标签等。
图片(Image):可以在列表项中显示图片,如缩略图、头像等。
图标(Icon):可以在列表项中使用图标,如操作按钮、状态指示器等。
按钮(Button):可以在列表项中添加按钮,用于触发特定的操作。
复选框(Checkbox):可以在列表项中添加复选框,用于多选操作。
开关(Toggle):可以在列表项中添加开关按钮,用于切换状态。
图表(Chart):可以在列表项中显示图表或图形,用于数据可视化。
扩展内容(Expansion Content):可以在列表项中添加可展开或可折叠的内容区域,用于显示更多详细信息。
.card 类会自动为元素添加内边距和阴影,而.list和.list-inset 类不会添加
使用 ionic 响应式栅格后,当屏幕的宽度小于指定的宽度时,会将原本在同一行上显示的列显示在不同行上,以使内容适应屏幕的宽度进行显示。
下载官方项目模板
为模板添加平台支持
修改原模板和添加自定义功能
用于集中存放项目用到的库文件和其它项目资源文件