有人可以澄清一下AngularJS控制器的生命周期是什么吗?
考虑以下示例:
var demoApp = angular.module('demo')
.config(function($routeProvider, $locationProvider) {
$routeProvider
.when('/home', {templateUrl: '/home.html', controller: 'HomeCtrl'})
.when('/users',{templateUrl: '/users.html', controller: 'UsersCtrl'})
.when('/users/:userId', {templateUrl: '/userEditor.html', controller: 'UserEditorCtrl'});
});
demoApp.controller('UserEditorCtrl', function($scope, $routeParams, UserResource) {
$scope.user = UserResource.get({id: $routeParams.userId});
});
例如:
在上面的示例中,当我导航到时/users/1
,将加载用户1并将其设置为$scope
。
然后,当我导航到时/users/2
,将加载用户2。是相同的UserEditorCtrl
重用实例,还是新创建的实例?
好吧,实际上问题是ngView
控制器的生命周期是多少。
控制器不是单例。任何人都可以创建一个新的控制器,并且它们永远不会被自动销毁。事实是,它通常与其基础范围的生命周期相关联。销毁其范围时,不会自动销毁该控制器。但是,销毁基础作用域后,其控制器就没有用了(至少在设计上应该如此)。
回答您的特定问题后,每次进行导航时,ngView
指令(以及ngController
指令)始终会创建一个新的控制器和一个新的作用域。而最后的范围将要毁灭为好。
生命周期“事件”非常简单。您的 “创建事件” 是控制器本身的构造。只需运行您的代码。要知道什么时候变得无用( “破坏事件”
),请监听作用域$destroy
事件:
$scope.$on('$destroy', function iVeBeenDismissed() {
// say goodbye to your controller here
// release resources, cancel request...
})
对于ngView
具体情况,你可以当内容被通过范围事件时加载的认识$viewContentLoaded
:
$scope.$on('$viewContentLoaded', function readyToTrick() {
// say hello to your new content here
// BUT NEVER TOUCHES THE DOM FROM A CONTROLLER
});
这是带有概念证明的Plunker(打开控制台窗口)。
生命周期及窗口控制 概念描述 在Nebula容器中开发H5App,首先必须要理解H5App的生命周期和窗口控制的基本概念。 为了方便理解,在这里我们可以用PC端的chrome浏览器来做概念参考。 appId 支付宝客户端内的应用id,用于让框架知晓需要启动哪个H5App,并且加载这个H5App默认的启动参数和离线包。 启动参数 当H5App启动时或者运行时,可以通过配置一些参数来控制某些特性,比如
C 没有GC机制,当C对象被导出到JavaScript环境后,必须使用某种方法进行对象生命周期管理,以彻底杜绝野指针、内存泄漏,引用计数无疑是最常用的方法。 4.4.1 引用计数基类 对象生命周期管理需要解决的问题是:当一个对象可能在多个地方被引用时,如何决定何时将其销毁。引用计数法解决这一问题的途径非常简单: 每个对象自带一个初值为0的引用计数; 对象的每个使用者,在获得一个对象的引用时,将其引
如果我编写一个简单的servlet应用程序,那么在我的servlet类中,我将扩展http servlet。这让容器知道我的类是一个servlet,它将管理servlet的“生命周期”。init、doget()、destroy()等。 但是Spring MVC framweock控制器类不扩展任何servlet类。它是一个有自己自定义方法的POJO。现在我可以使用请求映射单独调用这些方法。 但是,
问题内容: 我目前正在管理AngularJS开发项目。有传言说我们至少需要从当前的1.2升级到AngularJS 1.5。我提出的一项要求是,我必须提供1.5终止支持的证据,但是在有角度的网站上进行了多个小时的搜索和多次Google搜索后却找不到任何终止支持的信息。 关于何时不再为Angular v1.x开发安全补丁和错误修复程序,是否有官方评论? 问题答案: 根据Angular开发团队的说法,当
注:本文档提供的生命周期指的是 Universal App 的生命周期,它依赖 rax-app 提供的 runApp方法。 App 级生命周期 launch 在 App 启动时触发 使用生命周期 你可以使用 rax-app 提供的 useAppLaunch 来注册 App 级别的生命周期。 示例: import { useAppLaunch } from 'rax-app'; useAppLa