angularjs phase中的$root.phase是什么东西

angularJS中作用域是什么
作用域(scope)是构成angularJS应用的核心基础,在整个框架中都被广泛使用,因此了解它如何工作是非常重要的
应用的作用域是和应用的数据模型相关联的,同时作用域也是表达式执行的上下文
$scope对象是定义应用业务逻辑、控制器方法和视图属性的地方
作用域是视图和控制器之间的胶水,在应用将视图渲染并呈献给用户之前,视图中的模板会和作用域进行连接
作用域能做什么
提供观察者以监视数据模型的变化
可以将数据模型的变化通知给整个应用,甚至是系统外的组件
可以进行嵌套,隔离业务功能和数据
给表达式提供运算时所需的执行环境
视图和$scope
angularJS启动并生成视图时,会将根ng-app元素同$rootScope进行绑定
$rootScope是所有scope对象的最上层
$rootScope是angularJS中最接近全局作用域的对象。在rootScope上附加太多业 务逻并不是好主意,这与污染JavaScript的全局作用域是一样的,代码示例:
&!doctype html&
&html ng-app="freefedApp"&
&title&angular应用demo&/title&
&script src="angular.js"&&/script&
&script src="app.js"&&/script&
&div ng-controller="helloCtrl"&
&input ng-model="name" type="text" /&
&button ng-click="changeText()"&change&/button&
&div&{{ name }}&/div&
&div&apiKey:{{ apiKey }}&/div&
/*声明module*/
var module = angular.module('freefedApp',[]).run(['$rootScope',function($rootScope){
/*freefedApp模块内都可以访问到这个模块全局变量*/
$rootScope.apiKey = 'abcdef97h5';
/*声明控制器*/
module.controller('helloCtrl',['$scope',function($scope){
$scope.name = 'hello world';
$scope.changeText = function(){
$scope.name = 'hello dingdone';
/*监听数据模型的变化*/
$scope.$watch('name',function(newvalue,oldvalue){
阅读(...) 评论()关于 AngularJS 框架的使用有哪些经验值得分享? - 知乎1514被浏览127114分享邀请回答/morlay/angular-mobile-ui然后,说说我的一些做法。可能不够完善,毕竟还在折腾中。## DOM 的整体 or 零散首先是这篇神贴:AngularJS 与 jQuery 等传统操作 DOM 的思想有所不同,对于 jQuery 等,一般是先有完整 DOM 然后在这些 DOM 的基础上进行二次调教。而 AngularJS
等框架则是 根据 数据模型 以及其对应的 DOM 模版,然后通过模版像搭积木那样组合页面。显然的,前者在 SEO 上有天然优势;而后者,搜索引擎还只能拿到某个模版,而无内容。暂时没想到有什么特别好的解决方案,或许,对于内容页,可以继续使用传统方式,而只在需要更多交互的地方应用 AngularJS,特别是在移动端应用上。同理适用于各种 前端的 MVC 框架,后端只要为前端提供数据接口,而不再需要为其拼接 HTML.## 模块化AngularJS 也是遵循 AMD 的。(AMD 是啥,参考:)虽然它也可以按照传统代码方式来写(其首页介绍的用法 ),但是,既然都提供了这么一种模块的方法,为何不用上呢 (参考下他已有的较成熟衍生库 )。angular.module('app', [
'moduleA',
'moduleB',
.controller('MainCtrl', [
function ($scope) {
而且,这种写法还可以方便做代码的合并与压缩,在后面 Grunt 自动化 一节中,就会提到使用 Nodejs/Grunt 来自动的做这些事情。## 可复用模版 or 业务逻辑模版今年 Google 开发者大会中 提到的 Polymer()这货让人感觉像是 Angular Directives 的进化。而 Directives 做的事,就是把一堆 DOM 封装为一条或者一组 自定义的 HTML标签,作为可复用的模版,以供组装业务调用。 Demos 可参看:当然,为了方便修改,很多时候在做 directive 的时候需要将 template 用 templateUrl 代替,不用担心文件的碎片化,不利于前端加载 Grunt 自动化 一节 会提到如何合并这些碎片化的 模版。Directives 是作为可复用的模版,而业务逻辑则是一般是一个业务对应一个 html 及其的 controller.## 作用域间的通信上节提到了一个 html 及其的 controller,一个完整应用自然会包含很多的业务子块。自然会有很多很多 cotrollers.AngularJS 提供了 方法, $scope 或者 $rootScope 的 $broadcast $emit / $on$scope.$emit('eventA',msg);
$scope.$broadcast('eventA',msg);
$rootScope.$on('eventA',function(event,msg){
console.log(msg);
至于他们之间的差别,可参考这个 Demo, Chrome F12 ,你可以看到结果。## 数据池除了作用域间的传值外,还有个方法是统一的管理一个数据池,对于没有业务交叉的 controller,若是有公有数据的需要,都从这个数据池中取,而这个数据池更可以直接作为和后端数据的统一交互口,及本地缓存管理的地方。## Grunt 自动化Grunt()出现以后,我是发现 Git 上面基本上前端相关的项目上都多了个 Gruntfile.js,可见他确实好用。不太喜欢大多数项目中把所有任务都丢在一个文件里的方式。所以,利用 node.js 的特性,将任务集也分解开来。在
这里可以看到对应的代码。这里只说说,如何按照 angular module 的依存关系自动合并对应文件。首先是模块的命名,使得它能够和它的路径一致性。看这两张图就明白了。看这两张图就明白了。第二,除了特殊的,全局公用的模块外,其他模块在各自业务组件中建立引用关系。避免载入多余的模块。比如这里,我只需要把 Grunt 配置中,比如这里,我只需要把 Grunt 配置中,把 app.main 作为了入口文件,并配置它的全局引用,ngMobile 和 tpls(可复用模版转换而成的 js)通过 `grunt angular-concat-modules` 和 `grunt script-uglify`合并压缩自动完成。合并压缩自动完成。当然,这里更是直接做了任务,`grunt release` 一条指令搞定一切。而,对于 angular 模版转换为 js 有现成的 grunt-angular-templates 可用,这里不细说了,详看代码。## 测试工具 最后的,关于测试工具,官方有提供 但没用过,也不知道怎么用,希望有同行给予补充与介绍。其他的,在 API 文档里写得挺详细的。P.S.至于知乎,并非完全 Angular 的方式,希望能够进一步,至少在不需要 SEO 的部分。继续折腾去了,还有很多东西要弄。25830 条评论分享收藏感谢收起379 条评论分享收藏感谢收起查看更多回答4 个回答被折叠()问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
另外,是否有类似于main.js的那种js,里面可以去定义全局变量。例如var http = "/",可以使得其他的Ctrl.js,都可以调用。
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
思路不对,angular中不需要定义全局变量。你的数据应该通过service, factory, provider来提供。
而这些东西是可以依赖注入的,所以压根不需要全局变量
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
$rootScope是个对象,可以$rootScope.xxx='';的形式去绑定全局的变量
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
说的对,AngularJS使用依赖注入的风格来架构整个应用的框架,最好不要声明全局变量,而是把它做成Service。这样你能避免不少问题:
命名冲突。在javascript中命名冲突不会给出任何warning,如果你的项目不大出现概率较小,但非常难以调试。
初始化顺序。如果你在ACtrl中定义了一个全局变量window.a,比如你想在BCtrl中使用它,那么你需要保证ACtrl在BCtrl之前得到执行,这往往是不好实现,甚至逻辑混乱的。
在Angular中,最合理的办法是把a做成一个aService,注入到ACtrl和BCtrl之中。
如何定义一个service,以及Module、Service、Factory、Provider之间的关系可以参考这篇博客:
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
angular.module('app', []).run(function($rootScope) {
$rootScope.http = '/';
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
现在 都出来了
同步到新浪微博
分享到微博?
你好!看起来你挺喜欢这个内容,但是你还没有注册帐号。 当你创建了帐号,我们能准确地追踪你关注的问题,在有新答案或内容的时候收到网页和邮件通知。还能直接向作者咨询更多细节。如果上面的内容有帮助,记得点赞 (????)? 表示感谢。
明天提醒我
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:博客分类:
在使用AngulaJS编写应用时,我们经常需要做的一件事情就是对模型中的变量进行监视,并对其发生的变化做出相应的回应。如:购物车小计。
AngularJS为我们提供了一个非常方便的$watch方法,它可以帮助我们在每个scope中监视其中的变量。下面是一个非常简单的例子:
$scope.name = 'zhangsan';
$scope.count = 0;
$scope.cart = [
{id:1,name:'iphone5s',quantity:3,price:4300},
{id:2,name:'iphone5c',quantity:30,price:3300},
{id:3,name:'mac',quantity:3,price:14300},
{id:4,name:'ipad',quantity:100,price:2000}
// 监听一个model 当一个model每次改变时 都会触发第2个函数
$scope.$watch('name', function(newValue, oldValue) {
// console.log(newValue+ '===' +oldValue);
if ($scope.count & 3) {
$scope.name = '已将大于3次了';
$scope.$watch('cart', function(newValue, oldValue) {
// console.log(newValue);
angular.forEach(newValue, function(item, key) {
if(item.quantity & 1) {
var returnKey = confirm('是否从购物车内删除该产品');
if(returnKey) {
$scope.remove(item.id);
item.quantity = oldValue[key].
}, true); ////检查被监控的对象的每个属性是否发生变化
上面的这段代码非常简单,它用$watch来对$scope中的name进行监视,并在它发生变化的时候将$rootScope中的count属性增加1。因此,每当我们对name进行一次修改时,下面显示的change count数字就会增加1,当count&3时,改变name的值。
在AngularJS内部,每当我们对ng-model绑定的name属性进行一次修改,AngularJS内部的$digest就会运行一次,并在运行结束之后检查我们使用$watch来监视的东西,如果和进行上一次$digest之前相比有了变化,则执行我们在其中绑定的处理函数。
浏览 20891
hudeyong926
浏览: 1370282 次
来自: 武汉
你好,里面的 Crypt/TripleDES.php 和 Cr ...
楼主,Mac.php中里面的 Crypt/TripleDES. ...
楼主,Mac.php中里面的 Crypt/TripleDES. ...
能不能给个完整的demo
新手上路不会
你好,里面的 Crypt/TripleDES.php 和 Cr ...

我要回帖

更多关于 angularjs是什么框架 的文章

 

随机推荐