浅谈angular中控制器、服务和指令的关系


本文摘自PHP中文网,作者青灯夜游,侵删。

本篇文章给大家介绍一下angular控制器、服务和指令三者之间的关系。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。

【相关推荐:《angular教程》】

从总体来看,这三个组件的关系如下所示:

  • 服务负责从远端服务器抓取和存储数据。
  • 基于服务构建的控制器将为angular的作用域层次提供数据和功能。
  • 基于服务和控制器构建的指令将直接与文档对象模型(DOM)元素进行交互。

因为控制器并未使用依赖注入器进行注册,所以控制器和服务无法将控制器列为依赖。

1

<div ng-controller="MyController"></div>

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

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都会实例化一次,而服务只会实例化一次,即服务是单例的。

控制器可以将本地对象列为依赖,如$scope,但是服务无法将本地对象列为依赖。

1

2

3

m.factory('myService', function($scope) {

    //错误:$scope未使用依赖注入器进行注册

});

这就是为什么在angular中是控制器把javaScript数据和函数公开给HTMl而不是服务的原因:控制器可以访问$scope。

指令可以有一个相关联的控制器,可以把服务列为依赖。但是控制器和服务无法将指令列为依赖。

1

2

3

4

5

6

7

8

9

10

11

12

13

angular.module('stockDogApp')

  .directive('stockTable', function() {

    return {

        template: 'Views/templates/stock-table.html',

        restrict: 'E',

        scope: {

            watchlist: '='

        },

        controller: function ($scope) {

            //...

        }

    }

  });

指令还可以有一个require属性,用于保证指令的作用域必须总是另一指令作用域的子孙。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

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指令选项是完成这个工作的正确工具。

注:参考《自AngularJS高级编程》,仅当备忘录吧。

更多编程相关知识,请访问:编程入门!!

以上就是浅谈angular中控制器、服务和指令的关系的详细内容,更多文章请关注木庄网络博客

相关阅读 >>

浅谈Angular如何借助第三方组件和懒加载技术进行性能优化

浅谈Angular cli的两种安装方式

浅谈Angular控制器通信的4种方式

浅谈Angular中导入本地json文件的方法

Angular脏值检测与vue数据劫持的区别是什么

浅谈Angular cli工具如何从零搭建并运行一个简单项目

10个从喜到悲的Angular面试题

了解Angular中的变化检测(change detection)机制

深入了解Angular组件中的生命周期钩子

浅谈一下Angular模板引擎ng-template

更多相关阅读请进入《Angular》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...