找回密码
 FreeOZ用户注册
查看: 5857|回复: 67
打印 上一主题 下一主题

[学习深造] AngularJs 关于不使用ng-controller='HelloController'

[复制链接]
跳转到指定楼层
1#
发表于 10-3-2014 20:14:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?FreeOZ用户注册

x
例子

<html ng-app>
<head>
<script src="angular.js"></script>
<script src="controllers.js"></script>
</head>
<body>
<div ng-controller='HelloController'>
<p>{{greeting.text}}, World</p>
</div>
</body>
</html>

controllers.js:
function HelloController($scope) {
$scope.greeting = { text: 'Hello' };
}

有没有办法不在div里写ng-controller='HelloController',因为这样,如果想混淆javascript代码的话,仍旧必须给出HelloController,很容易给人提供阅读javascript的思路,导致obfuscate javascript失效
回复  

使用道具 举报

2#
发表于 10-3-2014 23:30:32 | 只看该作者
这个东西混淆起来可能要自己改一下混淆器才行。因为你要对html也混淆。
回复  

使用道具 举报

3#
发表于 11-3-2014 14:06:42 | 只看该作者
本帖最后由 simpledream 于 11-3-2014 14:09 编辑

一个想法,仅供参考,就是把controller写在router里面

比如:

  1. .config([
  2.     '$routeProvider'
  3.     ($routeProvider) ->
  4.         $routeProvider
  5.             .when(
  6.                 '/'                              
  7.                 templateUrl: 'views/main.html'
  8.                 controller: 'HelloController'
  9.             )
复制代码
为了简洁一点,我用了CoffeeScript,别介意
回复  

使用道具 举报

4#
 楼主| 发表于 11-3-2014 14:16:57 | 只看该作者


看不懂

routeProvider是啥代码? php运行在服务器上的吗?
回复  

使用道具 举报

5#
发表于 11-3-2014 16:23:47 | 只看该作者
本帖最后由 simpledream 于 11-3-2014 16:29 编辑
DDD888 发表于 11-3-2014 14:16
看不懂

routeProvider是啥代码? php运行在服务器上的吗?


看这个 http://docs.angularjs.org/api/ngRoute/provider/$routeProvider

可以用这里边的controller或者controllerAs来定义特定页面的controller,比如我刚才的代码就是定义主页面(router是 ‘/')的controller是‘HelloController'

简单说routerProvider 就是用来配置router的,没有server代码,全部是client代码

是不是我哪边写的不够清楚?
回复  

使用道具 举报

6#
发表于 11-3-2014 16:29:24 | 只看该作者
DDD888 发表于 11-3-2014 14:16
看不懂

routeProvider是啥代码? php运行在服务器上的吗?

routeProvider 是js 层面上的routing,和任何后台语言无关。 你可以完全只写一个html页面来实现。通过ajax加载你需要的template,如 'views/main.html'
回复  

使用道具 举报

7#
发表于 11-3-2014 21:49:37 | 只看该作者
simpledream 发表于 11-3-2014 14:06
一个想法,仅供参考,就是把controller写在router里面

比如:为了简洁一点,我用了CoffeeScript,别介意

同一个$routeProvider怎么要重复三次啊?
回复  

使用道具 举报

8#
发表于 11-3-2014 22:19:35 | 只看该作者
Angular Doc 里面就有manual initialization哦, 把initialization放到单独js,然后混淆下。

<!doctype html>
<html xmlns:ng="http://angularjs.org">
  <body>
    Hello {{'World'}}!
    <script src="http://code.angularjs.org/angular.js"></script>
    <script>
       angular.element(document).ready(function() {
         angular.module('myApp', []);
         angular.bootstrap(document, ['myApp']);
       });
    </script>
  </body>
</html>
回复  

使用道具 举报

9#
发表于 11-3-2014 22:25:29 | 只看该作者
提示: 作者被禁止或删除, 无法发言
本帖最后由 black_zerg 于 11-3-2014 22:27 编辑

说真的我看不出来Angular 有什么好,反生产力。 属于简单问题更简单,一般事情搞复杂,复杂问题变惨剧的节奏
回复  

使用道具 举报

10#
发表于 11-3-2014 22:55:40 | 只看该作者
black_zerg 发表于 11-3-2014 22:25
说真的我看不出来Angular 有什么好,反生产力。 属于简单问题更简单,一般事情搞复杂,复杂问题变惨剧的节奏 ...

我以前也和你这样想,用了半年,现在彻底爱上它了,真心好

评分

参与人数 2威望 +100 收起 理由
cais + 50 谢谢分享!
simpledream + 50 喜欢AngularJS

查看全部评分

回复  

使用道具 举报

11#
发表于 11-3-2014 22:59:00 | 只看该作者
cais 发表于 11-3-2014 21:49
同一个$routeProvider怎么要重复三次啊?

因为用了Dependency Injection

具体可以看这个 http://docs.angularjs.org/guide/di

这样代码压缩的时候可以彻底压缩成a,b,c 什么的,不然用uglify压缩的时候client端的app就会出错了
回复  

使用道具 举报

12#
发表于 11-3-2014 23:10:38 | 只看该作者
提示: 作者被禁止或删除, 无法发言
本帖最后由 black_zerg 于 11-3-2014 23:40 编辑
in10ts 发表于 11-3-2014 22:55
我以前也和你这样想,用了半年,现在彻底爱上它了,真心好


把个HTML弄跟xaml似的。还有那个双双括号,太难看了,不符合我的审美观。我从java出身,无数框架一路学过来,到python到GWT到JQuery到WPF到silverlight,  充分体会了框架都是吃饱了撑的道理。 当年的struts还不是全世界都觉得真心好,那其实就是撑的,要我说JSP和servlet才是真心好。
技术都是浮云,我现在比较看重的是美观。angular把HTML整的太难看了,不伦不类的. 框架越多魔术越多,学起来累改起来烦,一出问题就得google,看代码都看不明白。前端有个 JQuery就行了,说实话现在浏览器也牛了,IE也前进了,手写JS也没什么不好。

要不你们谁举个例子,证明一下angular 能做的事情 ,我用手写js没法实现或者非常吃力,那我就服了。
回复  

使用道具 举报

13#
发表于 12-3-2014 11:49:12 | 只看该作者
本帖最后由 simpledream 于 12-3-2014 11:50 编辑
black_zerg 发表于 11-3-2014 23:10
把个HTML弄跟xaml似的。还有那个双双括号,太难看了,不符合我的审美观。我从java出身,无数框架一路学 ...


确实是这样,一般普通的展示型网页jQuery就可以了,我看法和你一样。

但就像为什么BackboneJS会出现一样,现在客户端可以非常复杂了,要做以前桌面应用做的事情了,比如Gmail,Google Map,各种在线的GTD时间管理工具,这时候jQuery就不够了,因为Interaction太多了

这个时候Two way binding,几乎是必须的,而Angular之于BackboneJS, KnockoutJS, EmberJS来说是最简单的,后几个好用get和set来实现

举几个例子:Evernote在线版(能现实应用版几乎所有功能),Gmail,Google Map, 在线音乐(太多了,我喜欢的百度音乐,和本地应用没什么区别),在线试衣间

总的来说和user的Interaction非常多非常复杂的,和本地应用可以媲美的就需要angular之类的框架,但因为日常中大多数网站都是浏览型,用户点点看看,jQuery足够,我和你观点一致。
回复  

使用道具 举报

14#
 楼主| 发表于 12-3-2014 13:29:53 | 只看该作者
我因为我写的javascript太长啦,所以想用angularJs来写很少的代码来做同样的事
回复  

使用道具 举报

15#
发表于 12-3-2014 18:34:49 | 只看该作者
提示: 作者被禁止或删除, 无法发言
这些例子那个用了angular. 要是Google map 能用angular我就真服了,这玩意就只能做简单东西
回复  

使用道具 举报

16#
发表于 12-3-2014 20:02:02 | 只看该作者
我打算搞得一个开源框架knot.js,定位和knockoutjs差不多,但因为绑定逻辑和html分离,混淆化会比较容易。修改混淆器让它把cbs定义当成css混淆即可。
这个帖子是关于这个框架一个讨论帖。后来因为太忙就没继续维护网站和github了。现在还在我们内部使用用,经过一个项目的检验之后打算继续包装开源。
http://www.freeoz.org/ibbs/thread-1089308-4-1.html

评分

参与人数 1威望 +20 收起 理由
cais + 20 很给力!

查看全部评分

回复  

使用道具 举报

17#
发表于 12-3-2014 20:23:04 | 只看该作者
black_zerg 发表于 12-3-2014 18:34
这些例子那个用了angular. 要是Google map 能用angular我就真服了,这玩意就只能做简单东西

哥们儿,我也不想说服你什么的,就我自己的经历来说,我是喜欢AngularJS的,我推荐你试一下,就这样

如果你现在的Projects没有AngularJS也很好,那确实没必要

而我的话,AngularJS帮了我大忙,就是这样

就事论事,没有冒犯的意思。


评分

参与人数 2威望 +70 收起 理由
in10ts + 50 谢谢分享!
cais + 20 你太有才了!

查看全部评分

回复  

使用道具 举报

18#
发表于 12-3-2014 20:27:14 | 只看该作者
DDD888 发表于 12-3-2014 13:29
我因为我写的javascript太长啦,所以想用angularJs来写很少的代码来做同样的事


是啊,有人说可以减少80%的代码,有点吹了,但是就我个人来说,30%有的

而且AngularJS和jQuery兼容很好,这样在AngularJS的Directive里面,我还是可以写jQuery代码,开心
回复  

使用道具 举报

19#
发表于 12-3-2014 20:29:01 | 只看该作者
新的东西不停的出现。jquery刚刚用上手,backbone还没学好,又出来不少新的。
回复  

使用道具 举报

20#
发表于 12-3-2014 21:14:30 | 只看该作者
以AngularJS为代表的front end框架是web开发的新发展。以前数据绑定html都是在服务器端搞的。从最早的Loop循环输出table,到Asp.Net的服务器端控件。现在异步加载正在趋向只获取Json数据,而在前段实现数据与Html的绑定。Http协议不再是html传输协议,而更像数据服务协议了。

大多数程序员我想都是偏后端的多,前端搞UI的一度不被认为是开发人员。只是现在市场需求变了,新市场针对的都是普通用户,这些普通用户需要的是简单好用的UI,也就是好的用户体验。满屏幕数据,表格,按钮的“专业”界面,已经没有多少市场可以挖掘了。苹果的成功,正是以用户体验为入口,开发了一片新的技术受众。相同的,web的开发,在移动设备进入后,也开始注重前端的表现了。

说白了,普通用户能有多大复杂的业务逻辑。还不就是几个功能,换不同的界面,不同的用法吗。后台逻辑,早就开发的差不多了,你后端做得再好,没有大量数据,普通应用,谁看得出好坏?只有前端的第一感觉最直观。页面老是刷新,老是跳,就是给人慢,还要看网络状况。页面设计不好,也给人垃圾的感觉。相反,优雅的布局,responsive的UI,后端就算慢,就算垃圾,前端只要有个gif表示loading,客户多少还是OK的。

javascript已经越来越像web的前端引擎了,那些复杂的框架,minify,obfuscate之后几乎就和binary dll一样,很难调试。这也说明前端现在是一片新天地,没有那个公司能完全控制住web前端开发的模式。浏览器,html5支持,到现在各自不同javascript框架。真实一片丛林。

个人感觉AngularJS太大而全了,Knockout的规模比较容易入门。Knockout可以看作前台的数据绑定控件。html代码也会少一些。像其他bootstrap什么的UI框架,最是麻烦,一个简单的html tag,套上bootstrap,到了客户端,就一大堆属性,css,乱七八糟的。感觉就像请一个魔术师变魔法一样。观众看得很开心,不过要是他搞砸了,你想补救基本不可能。

评分

参与人数 1威望 +20 收起 理由
black_zerg + 20 我很赞同!

查看全部评分

回复  

使用道具 举报

21#
发表于 12-3-2014 22:22:05 | 只看该作者
提示: 作者被禁止或删除, 无法发言
本帖最后由 black_zerg 于 12-3-2014 22:54 编辑

基本上就是楼上这个意思。用一个框架,基本上就是看两个 一个是功能明确,一个就是必须灵活不能太侵略性。 在我看来比较好的框架有 Hibernate,d3, jQuery 之类,其实都是库而非框架。就angular来说,连带学习成本,我非常不相信这东西能提高我的开发效率。近期类似的框架都是针对CRUD来的,所以对我来说完全没用,我很多年都没写增删改了。

个人觉得使用这种重型框架都是自虐。工作量不是光看代码量的,这种魔法框架一旦砸了就整个悲剧。

忍不住又拿出我这个例子 http://shenshowcase.appspot.com/static/map/demo/basic.html ,这个整个地图控件就是我手写的,没用任何框架。 你倒用个angular写写看。angular说来说去就是大而不专。jQuery基本没有学习坡度,原生javascript + html + css 是行业规范。angular则看似简单实则笨重,不好学。上面有人说省了 30%的代码,那还算个事么? 代码不等于工作量。

说来说去就是图快就暴力jQuery,长期产品就原生javascript,适用任何场合。你一样可以实现所有的router,binding 这些概念,要不了几行代码.  angular属于不伦不类。在这上的脑力投资,换个地方可能完全没用。 当然了,如果工作需要就没什么好说的。

我们都是纯技术流的讨论,也不用着急上火。还是那么说,你们谁用angular写一个例子,我有空就来试试用纯JS实现。javascript其实是很不错的语言,可以用很多技巧把代码写的非常简洁的。 也不是要争个对错,就是检验一下理论。实践出真知,不操代码那都是嘴皮子。你们可以巩固一下自己的angular知识,宣传一下里面的优秀功能.

因为对javascript感兴趣,所以就多说几句。说到底, angular认为目前的 HTML设计的不对,他要自己来一套。这我非常不同意。我觉得 HTML +css + js的三足鼎立真的是非常好的设计。干干净净的HTML那是怎么看怎么顺眼。 javascript 初看起来有点奇怪,但是实际上什么都能做,而且非常简洁。因为‘简陋’,所以给予有创造力的程序员很大的创作空间。写js就可以写出非常有创造性的东西。不像java那么硬邦邦,大家都写一个样。这些框架模式,其实不都是人写的,喜欢就用,不喜欢就自己写一套,又有多难。
回复  

使用道具 举报

22#
发表于 12-3-2014 23:19:22 | 只看该作者
时代在变,特别是在经济不好的大环境下。以前一直都是靠着大公司(.Net/Java)的开发技术,在大公司混饭吃。.Net/Java确实在一定程度上统治了企业级的软件开发。大公司用这些技术,容易找到这方面的人,也有微软,sun,oracle这样的大技术公司做支持。那些开源的(PHP,perl,LAMP什么的),前端html,javascript,css,标准不成熟,也缺乏大公司在企业级别去支持,实现的功能又是商业逻辑中非核心的部分,用这些的大多也就是小公司为了省钱,用不起大公司的东西。

现在经济不好了,企业级开发一方面已经比较成熟了,另一方面开始往印度,中国,东南亚转移,再有就是新开项目由于经济的问题大大减少了,维持一个一定规模的商业逻辑开发团队在高成本地区真的不是大公司现在的策略。界面,用户体验的东西一方面开发成本低,维持的人不需要很多,动一动,改一改,效果还特别好。就好比产品都一进做好了,只是在不景气的环境下需要换个新鲜包装来刺激消费一样。这是花最小成本获得最大的利益。

Java自从被Oracle收购后好像消失了一样,再没听说有什么新发展。.Net倒是版本开得很快,可惜微软的windows平台一直没有突破,倒是在windows 8一个版本,搞得有些不伦不类。特别是对开发人员,传统的开发人员像是被提出desktop,逼到tablet和mobile一样,而微软的标准,显然没有统治这一领域的权威性。这几年,谁敢花时间和精力在微软的最新技术上?WCF,大而全,底层数据又臃肿,配置一大堆,开发没什么。WPF,一开始慢,之后再metro平台上又有些被抛弃,只是保留的界面定义语言。LINQ to sql说是不推荐,方向是EF。EF和MVC,以及现在的很多Asp.Net技术,基本都是源自community的,在被微软扶正。IE浏览器也就那些一定需要IE的activeX,silverlight网站会用一些。说到silverlight,又是一个要被抛弃的东西。谁花时间在这上面,谁心里明白。Windows 8又重新把C++,javascript推上来,估计是C++的team重新掌控了OS开发的方向。.Net整个平台的level都有些昏暗。

哎。。。变化催人前进啊。。。无奈无奈。。。

google的工程师都太猛了,时间太多,钱太多可能。搞出来的框架估计是给一定程度的程序员用的。我是根本没想过前台javascript要搞成今天这样。以前就是做做菜单,搞些特效而已。也有说这就是跟着微软的下场,用微软的都不是真正的程序员。

语言设计上,确实是C#.Net学着舒服,至少是在LINQ之前。同样设计了Delphi的口碑也是不错,比同时代的vb6似乎评价高。可惜没人能改变C++难弄的局面。某种程度,javascript倒开始有些像C++了。实际上的web前台标准,没有哪家公司能垄断,大家都开始磋商标准化的推进和演变。谁要往上面加功能,加自己公司的特色都特难,因为别家的公司,浏览器不一定支持你。不过这个语言的灵活性/操蛋性,倒是可以支持很多天马行空的扩展。JQuery能成功,是因为它处理了不同浏览器的javascript标准化访问,很多时候,我觉得javascript的跨浏览器标准化,是由jQuery实现的。即便如此,JQuery也需要放弃对IE早版本的支持来继续move on。

AngularJS并不是一个标准化程度的东西,倒是更像要改变或者规范程序员在客户端的开发理念。就像当年的Asp.Net server side web form一样,那套东西,现在想想完全是硬搬桌面开发到web开发来。我对Angular其实不熟,就看过几个视频,几个sample,几页文档。这东西真是吓到我了,感觉要把整个后端搬到前台来写一样。还有那个很神奇的Node.js。似乎只是用了javascript的语法,来弄一个web server?Node的走红,好像就是因为现在这种重量级前台应用的需要,自从把http当数据传送协议来用后,一个轻量级的web server就很有必要了,现存的web server,配合上面跑的什么后台服务程序,都太浪费资源了。Asp.Net那个一度耗费我无数精力去理解学习的page life cycle,现在看来完全是阻碍其serve现在这种轻量级JSON数据访问的最大弊病。

我看现在的JSON数据请求,最好是数据库能直接开一个接口在web server上,然后前台的javascript直接写SQL,通过http,url也好,post也罢,直接去数据库引擎。然后数据库就直接返回JSON格式的数据是最理想的解决方案了。都省得数据从raw转换到json了。

什么是老外嘴里的good old time,现在我是体会到了。。。

评分

参与人数 2威望 +100 收起 理由
simpledream + 50 你太有才了!
in10ts + 50 你太有才了!

查看全部评分

回复  

使用道具 举报

23#
发表于 12-3-2014 23:23:33 | 只看该作者
提示: 作者被禁止或删除, 无法发言
本帖最后由 black_zerg 于 12-3-2014 23:26 编辑

楼上牛! 我还真没想过可以前台写SQL,不过想想其实还真的可行。那帮前端狂人说不定还喜欢得很,搞出个js版本的hibernate. 我最近转到 c#阵营了,要请教各位高手 .net这边有什么关键技术是必学的?
回复  

使用道具 举报

24#
 楼主| 发表于 13-3-2014 06:30:19 | 只看该作者
black_zerg 发表于 12-3-2014 23:23
楼上牛! 我还真没想过可以前台写SQL,不过想想其实还真的可行。那帮前端狂人说不定还喜欢得很,搞出个js版 ...

unit test for c#
回复  

使用道具 举报

25#
 楼主| 发表于 13-3-2014 06:31:51 | 只看该作者
mason00 发表于 12-3-2014 23:19
时代在变,特别是在经济不好的大环境下。以前一直都是靠着大公司(.Net/Java)的开发技术,在大公司混饭吃。. ...

前台不应该直接发sql到后台,最明显的就是容易被人黑了网站
回复  

使用道具 举报

26#
 楼主| 发表于 13-3-2014 08:13:56 | 只看该作者
simpledream 发表于 12-3-2014 20:27
是啊,有人说可以减少80%的代码,有点吹了,但是就我个人来说,30%有的

而且AngularJS和jQuery兼容很 ...

是的,书上说的,现在唯一担心的就是给人读懂我写的网站
回复  

使用道具 举报

27#
发表于 13-3-2014 10:14:40 | 只看该作者
本帖最后由 simpledream 于 13-3-2014 11:30 编辑
DDD888 发表于 13-3-2014 08:13
是的,书上说的,现在唯一担心的就是给人读懂我写的网站


引用一段话:
AngularJS is not only an innovative framework by today's standards, but it also
influences the web development space of tomorrow. The AngularJS team works
closely with the authors of the mentioned specifications, so there is a chance that
many ideas promoted by AngularJS will make it into the browser's internals
! We can
expect that time spent learning and playing with AngularJS will pay off in the future.


这段话来自AngularJS团队成员,简单说就是AngularJS用的以后很有可能会成为浏览器内置,成为标准,所以学AngularJS是值得的,它是未来的方向。

对于你担心的问题,其实AngularJS写的网站更加语义化,更加好懂,我个人觉得。

比如一个tooltip,angularJS会这样(可以这样,非必须)
  1. <tooltip data-title="This is a tooltip">Hover here<tooltip>
复制代码
对比jQuery版本
  1. <div class="tooltip" data-title="This is a tooltip">Hover here</div>
复制代码
你可以看出AngularJS让你写domain-specific language (DSL) 所以你的HTML可以非常干净,比如下面的一个比较极端的例子
  1. <body>
  2.   <main-content><main-content>
  3.   <sidebar data-title="This is a sidebar"><sidebar>
  4.   <pagination><pagination>
  5. <body>
复制代码
好了,具体内容可以放到模板里,这样你的HTML非常干净,一目了然,别人看到了就知道,这个网页3个部分,主内容(main content),侧边栏(sidebar),最后是分页(pagination)

更重要的是可以复用,比如另外一个页面也需要一个类似的侧边栏(比如只有title不一样),你可以用同样的,只是配置改下,而改配置,你只需要改HTML
  1. <sidebar data-title="This is a sidebar for another page"><sidebar>
复制代码

评分

参与人数 1威望 +50 收起 理由
in10ts + 50 谢谢分享!

查看全部评分

回复  

使用道具 举报

28#
发表于 13-3-2014 10:18:23 | 只看该作者
本帖最后由 simpledream 于 13-3-2014 10:38 编辑
DDD888 发表于 13-3-2014 06:31
前台不应该直接发sql到后台,最明显的就是容易被人黑了网站


但是metoerJS,就是这样,貌似很酷,也没说出现过安全问题,而且越来越火了,上次看还只有6000多star,现在有11000多了,厉害啊 https://github.com/meteor/meteor

我还没用过metoerJS,但是很赶兴趣,我觉得很不错,简单看过官方的介绍,这个问题应该不存在

评分

参与人数 1威望 +50 收起 理由
in10ts + 50 挺不错的样子 :)

查看全部评分

回复  

使用道具 举报

29#
发表于 13-3-2014 10:36:05 | 只看该作者
mason00 发表于 12-3-2014 23:19
时代在变,特别是在经济不好的大环境下。以前一直都是靠着大公司(.Net/Java)的开发技术,在大公司混饭吃。. ...

写的真好,不能同意更多
回复  

使用道具 举报

30#
发表于 13-3-2014 10:51:06 | 只看该作者
angularjs说一些标准要到浏览器里,这是趋势,问题是到哪个浏览器?ie支持吗?firefox买账吗?FF最近show了一个unreal engine在浏览器里跑游戏,我想浏览器逐渐演化成客户端操作系统也不是不可能,只是如何公布各浏览器都支持的标准是个问题。
回复  

使用道具 举报

您需要登录后才可以回帖 登录 | FreeOZ用户注册

本版积分规则

小黑屋|手机版|Archiver|FreeOZ论坛

GMT+11, 11-11-2025 22:09 , Processed in 0.034915 second(s), 46 queries , Gzip On, Redis On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表