angular控制器、服务和指令三者之间的关系
从总体来看,这三个组件的关系如下所示:
- 服务负责从远端服务器抓取和存储数据。
- 基于服务构建的控制器将为angular的作用域层次提供数据和功能。
- 基于服务和控制器构建的指令将直接与文档对象模型(DOM)元素进行交互。
<div ng-controller="MyController"></div>
var m = angular.module('myModule');
m.factory('myService', function() {
return { answer: 42 };
});
m.controller('MyController', function(myService) {
//使用myService
});
m.controller('MyController2', function(MyController) {
//错误:使用控制器注册
});
m.factory('myService2', function(MyController) {
//错误:使用控制器注册
});
每个ng-controller都会实例化一次,而服务只会实例化一次,即服务是单例的。
m.factory('myService', function($scope) {
//错误:$scope未使用依赖注入器进行注册
});
这就是为什么在angular中是控制器把javaScript数据和函数公开给HTMl而不是服务的原因:控制器可以访问$scope。
指令可以有一个相关联的控制器,可以把服务列为依赖。但是控制器和服务无法将指令列为依赖。
angular.module('stockDogApp')
.directive('stockTable', function() {
return {
template: 'Views/templates/stock-table.html',
restrict: 'E',
scope: {
watchlist: '='
},
controller: function ($scope) {
//...
}
}
});
指令还可以有一个require属性,用于保证指令的作用域必须总是另一指令作用域的子孙。
angular.module('stockDogApp')
.directive('stockRow', function($timeout, QuoteService) {
return {
restrict: 'A',
require: '^stockTable' //stockTable指令,^表示在父作用域中寻找
scope: {
stock: '=',
isLast: '='
},
link: function ($scope, $element, $attrs, stockTableCtrl) {
//..
}
}
});
指令选项require要求stockRow指令的作用域必须是stockTable指令的作用域的子孙,而且可以访问被实例化的stockTable指令的控制器,它是link函数的第4个参数。如果两个指令需要一起使用,那么require指令选项是完成这个工作的正确工具。
angular控制器、服务和指令三者之间的关系的更多相关文章
- 转:spring data jpa、 hibernate、 jpa 三者之间的关系
原文链接:spring data jpa. hibernate. jpa 三者之间的关系 spring data jpa hibernate jpa 三者之间的关系 JPA规范与ORM框架之间的关系是 ...
- 电脑结构和CPU、内存、硬盘三者之间的关系
前面提到了,电脑之父——冯·诺伊曼提出了计算机的五大部件:输入设备.输出设备.存储器.运算器和控制器. 我们看一下现在我们电脑的: 键盘鼠标.显示器.机箱.音响等等. 这里显示器为比较老的CRT显示器 ...
- 网络互联技术(2)——前篇—【转载】电脑结构和CPU、内存、硬盘三者之间的关系
原文链接:传送门 详细内容: 电脑结构和CPU.内存.硬盘三者之间的关系 前面提到了,电脑之父——冯·诺伊曼提出了计算机的五大部件:输入设备.输出设备.存储器.运算器和控制器. 我们看一下现在我们电脑 ...
- JDK,JRE,JVM三者之间的关系和作用
1,定义: JDK: Java Develpment Kit java 开发工具 bin:最主要的是编译器(javac.exe) include:java和JVM交互用的头文件 lib:类库 JRE: ...
- silverlight Canvas、StackPanel、Grid三者之间的关系
学习 silverlight 首先Canvas.StackPanel.Grid 博客园里看到jailu的这篇文章整理得很好 贴下来: Silverlight提供了非常灵活的布局管理系统,让程序员和 ...
- 【Linux网络编程】TCP网络编程中connect()、listen()和accept()三者之间的关系
[Linux网络编程]TCP网络编程中connect().listen()和accept()三者之间的关系 基于 TCP 的网络编程开发分为服务器端和客户端两部分,常见的核心步骤和流程如下: conn ...
- 程序中try、throw、catch三者之间的关系
c++程序中,采用一种专门的结构化处理逻辑的异常处理机制. 1.try语句 try语句块的作用是启动异常处理机制,检测try语句块中程序语句执行时可能出现的异常. try语句块总是与catch一同出现 ...
- Window系统、主函数和窗体函数这三者之间的关系
理解Window系统.主窗体.窗体函数这三者之间的关系,对于编写Windows程序十分重要. 主函数和窗体函数都是由Windows系统来调用的函数.仅仅只是主函数是程序启动之后.系统首先调用的函数: ...
- 5.Javascript 原型链之原型对象、实例和构造函数三者之间的关系
前言:用了这么久js,对于它的原型链一直有种模糊的不确切感,很不爽,隧解析之. 本文主要解决的问题有以下三个: (1)constructor 和 prototype 以及实例之间啥关系? (2)pro ...
随机推荐
- Spring03-jdbc
1,Spring集成Jdbc,需要导入spring包和数据库驱动包,这里我们使用的是mysql驱动包 2,选择一个数据源(DBCP,C3P0),这里我们使用DBCP,需要导入DBCP驱动包 3,创建j ...
- Linux环境下启动MySQL数据库出现找不到mysqld.sock的解决办法!
问题: 在普通用户权限下运行:mysql -u root -p,回车之后如果会出现如下错误:ERROR 2002 (HY000): Can't connect to local MySQL serve ...
- MySQL集群(三)mysql-proxy搭建负载均衡与读写分离
前言 前面学习了主从复制和主主复制,接下来给大家分享一下怎么去使用mysql-proxy这个插件去配置MySQL集群中的负载均衡以及读写分离. 注意:这里比较坑的就是mysql-proxy一直没有更新 ...
- 快速学会require的使用
快速学会使用require.js 1.get start 先到官网下载requirejs到本地,官方同时提供Node版本r.js,我们只使用requirejs即可. 接下来在页面上写入 <scr ...
- python进阶之Socket 网络编程
一:网络编程介绍 自从互联网诞生以来,现在基本上所有的程序都是网络程序,很少有单机版的程序了. 计算机网络就是把各个计算机连接到一起,让网络中的计算机可以互相通信.网络编程就是如何在程序中实现两 ...
- python基础之七种运算符
废话不多说,上节说的是数据类型,本篇讲讲数据运算. 在算式"1+2"中,"1"和"2"被称为操作数,"+"被称为运算符 ...
- Finally-操作返回值
Finally中操作返回会出现一个问题?直接看代码 static int M1() { ; try { result = result + ; //======引发异常的代码========== , ...
- 研磨SpringCloud系列(一)第一个Spring Boot应用
在此之前,给大家推荐几个东西. STS,Spring官方基于eclipse做的扩展ide.Spring官方背书. 第二个,lombok,注解生成get/set,构造以及基本方法的插件,"隐藏 ...
- PyTorch教程之Tensors
Tensors类似于numpy的ndarrays,但是可以在GPU上使用来加速计算. 一.Tensors的构建 from __future__ import print_function import ...
- 编写通用shell脚本启动java项目,适用于多数服务,只需修改服务名即可
文件名:service-user.sh 文件内容: ##shell脚本的头文件必须有#!/bin/sh ##再次配置java环境变量以防报其他错误## java env#jdk安装目录export J ...