最近刚学AngularJS,用到$http异步加载后台数据,自己写的时候想当然直接写在了link里面,比如单击按钮加载数据,后来发下控制器、service都可以用来操作DOM,那么,这三者究竟有何区别?我写一些逻辑的时候究竟该放在哪个里面?
最近刚学AngularJS,用到$http异步加载后台数据,自己写的时候想当然直接写在了link里面,比如单击按钮加载数据,后来发下控制器、service都可以用来操作DOM,那么,这三者究竟有何区别?我写一些逻辑的时候究竟该放在哪个里面?
angularjs 并不提倡 直接操作DOM。所以,但凡是你想操作DOM的步骤,一般都可以转化为angular的方式来进行。但是实在想操作一些的话,在你说的三个东西中,link是最合适的。
angular中全局方法 angular.element()等同于$(),方便你的DOM操作,但是在没有引入jquery的前提下,它的功能绝对不如jQuery强大。
另外,说一下三者的区别。 我们经常把数据处理逻辑写入controller中,一些可以可复用的代码写入service。比如向后端的http请求。link则是指令的一部分,指令的存在的目的也是代码的可复用。总而言之,无论service还是指令,目的都是为了前端开发的组件化,代码可复用。
在不熟悉的情况下,可以尝试把代码都放在controller中。
给你举一个例子你就明白了
jQuery思维方式:
angular.element(dom).addClass('someClass');
Angular思维方式:
view:
<div ng-class="{ someClass : someCondition }"></div>
controller:
$scope.someCondition = condition ? true : false;
补充:
controller: 顾名思义,控制逻辑的地方,你模块中的所有业务代码基本都在这里,这里只负责和后端进行数据交互。
service: 你说的 $http 就是Angular封装好的服务,它既然是服务,当然是在项目的任意地方都可以随时拿来用,这类代码都会封装成服务。
link: 没有link这个服务或指令, link是指令里的链接函数,你可以理解为将控制代码和dom进行链接的地方。
指令这个部分,我建议LZ专门抽空去单独了解一下。而且至少是在理解了Angular思维方式以后,否则很容易把指令当成jQuery的容器……
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
首先说明下 angular体系中是没有link这个东西的 题主说的link 是 directive中的link对吧.
这个三个angular 组件分别有自己的作用.
controller:主要是处理与界面进行交互的部分以及一些逻辑处理. controller 在每次界面引用的时候创建.
service : 会在项目启动的时候进行创建,也就是说 service在系统中是单例的.一般会进行数据存储,和系统级的服务.其实还有 factory,provider 可以去了解下.
directive: 个人认为主要是为了写html插件和操作html使用的.一般了解了directive 基本angular就没什么问题了.
个人理解, 勿喷.