AngularJS中的继承和嵌套视图
Inheritance and nested views in AngularJS
我正在尝试在angularjs中设置一些嵌套视图。我一直在使用ui路由器库来完成这项工作,这在大多数情况下都很有效。问题是,每个视图都有一个单独的控制器,它们之间没有真正的继承。如果我想从子控制器修改父控制器中的某些内容,我必须使用$scope$父母亲这有点痛苦,如果有多个继承级别,并且你必须记住你正在访问的变量在哪个级别,情况可能会变得更糟。此外,如果你忘记在子控制器中使用$parent,并且你试图修改父控制器的一个变量,Angular将创建该变量的新实例,这可能会导致一些难以跟踪的错误。
理想情况下,我只能使用原型继承。这也可以很好地映射到Typescript或Coffeescript中的类中。我想到的一种方法是去掉所有的父控制器,只使用子控制器,这些子控制器将继承原型(超级类)的任何通用功能。然后你只需要把控制器放在$rootScope上,这样父视图就可以访问它
有人能想出这个解决方案或更好的解决方案的任何问题吗?如果我只使用$parent并让Angular处理"继承",会更好吗。
感谢
如果稍微修改源代码,您应该能够启用protypal继承。
打开文件/ui router/src/viewDirective.js,你应该在顶部附近找到这个:
var directive = {
restrict: 'ECA',
terminal: true,
transclude: true,
...
添加另一行,使其显示:
var directive = {
restrict: 'ECA',
terminal: true,
transclude: true,
scope: true,
...
这将启用继承。我找不到一个好的直接来源,但这个你管播放列表充满了各种角度的优点。
正如John所指出的那样,$scope对象相互继承,但实际控制器没有。所以我决定设置它,这样控制器就可以相互继承。为了做到这一点,我有一个根控制器,看起来像这样:
function rootCtrl($scope) {
$scope.ctrl={};
$scope.ctrl.scope = $scope;
}
然后在我嵌套最深的子控制器中,我有这样的
function myCtrl($scope, $dependency1, $dependency2) {
myCtrlImpl.apply($scope.ctrl, [$http, $dependency1, $dependency2]);
}
function myCtrlImpl($dependency1, $dependency2) {
this.someVariableThatIsAccessableEverywhere = ":)";
//If I want to access scope from here I can just do something like
//this.scope.$watch...
}
现在,如果我想将任何功能从myCtrlImpl转移到基本原型中,我可以使用标准原型继承。
- angularjs中带有ui路由器的嵌套视图
- 状态更改期间角度UI路由器中的嵌套视图滞后
- 带有ui.router的带角度的嵌套视图
- Angularjs 中的嵌套视图,每个视图都有单独的控制器
- 挖空.js嵌套视图模型不起作用
- Angular UI Router-在不了解第二级嵌套视图的情况下更改第三级嵌套视图
- 创建表时在marionete.js中嵌套视图
- 与AngularJs中的嵌套视图相关
- MarionetteJS嵌套视图
- 嵌套视图的推荐方式是什么
- Ember.js中的嵌套视图
- 管理模板中定义的嵌套视图的顺序
- 如何在使用具有嵌套视图的 ui 路由器时添加用户控制器
- 角度 UI 路由器嵌套视图不起作用
- 添加嵌套视图后代码停止工作
- 角度 UI 路由器嵌套视图 使用或刷新直接 URL 时不会加载页面
- 角度 Js UI 路由器嵌套视图
- Ui 路由器 AngularJs 嵌套状态和嵌套视图正确
- Knockoutjs 3.2.0 中的嵌套视图模型
- UI 路由器嵌套视图不会呈现(无错误)