这是一个现实生活中的Angular问题我无法解决这个问题。 我喜欢Angular,但这个问题现在让我烦恼不已。
扩展现有控制器功能的最佳做法是什么,并在我的应用程序的其他页面上使用扩展控制器? 换句话说:如何在Angular中进行控制器继承?
已编辑 - 2014年9月23日,不要认为我原来的用例说明有助于访问者更好地理解我在此之后所做的事情。我认为它会将人们从真正的问题中解脱出来。
答案 0 :(得分:44)
半年后,我想我完全理解发生了什么。 正如在这篇文章的评论中指出的那样,最简单的答案是服务。
在最佳情况下,所有范围变量都是从工厂/服务收集的值。不过,您可能希望使用完全相同的控制器和一个额外的函数:$ scope.someFunction(){},并保留其余部分。在这种情况下,你确实有一个“瘦”控制器逻辑,这是理想的控制器设计 - 但仍然可能最终导致一百或更多行代码。您不希望在其他控制器中复制,只是因为您需要一些额外的控制器逻辑(如$ scope.someFunction())
那你做什么?
答案是:
如果你绝对肯定你做了,请去控制器注射:
.controller('childController', function ($scope, $controller) {
'use strict';
$controller('parentController', {$scope: $scope});
$scope.someFunction=function(){}
})
就这么简单。 - 通常情况下,工厂可以解决问题..
希望您觉得这很有用;)
答案 1 :(得分:-1)
您所指的问题在我看来就像通用代码重用问题,在计算机研究领域(在上个世纪发明)中有标准解决方案,即inheritance。不幸的是,由于OOP没有在JavaScript社区中广泛采用的众多原因,其中之一就是它不是该语言的核心功能。另一个原因是开发人员愿意在解决同样的问题时创建自己的方法。通过创建这些不同的方法,开发人员将社区划分为以不同方式处理继承的部分。
它会导致OOP整体观念模糊,让人们害怕这三个字母。在我的实践中,我遇到过十几个人,他们认为JavaScript不是为OOP而制作的,而是像#34; JavaScript那样提高了它的功能语言"或者&# 34;继承是一种反模式"或者"不要做那些JavaScript不适合"的事情。但是当你问这些人OOP是什么时候?......通常他们都不能提供答案。所以有一个意见很好,但必须附加一些调查。
回答你的问题,我建议使用John Resig的JavaScript继承方法,该方法在以下SO帖子中有详细描述:angularjs with oop inheritance in action