我有一个简单的 Controller ,并且想引入一个非常相似的附加 Controller ,但不需要复制太多代码。
angular.module('test').controller('parentController', parentController);
parentController.$inject = ['$scope', '$location', 'someService'];
function myController($scope, $location, someService) {
var params = getQueryString();
var rsp = executeQuery(params);
processResponse(rsp);
function getQueryString() {
return "?param=1&someparam=2";
}
function executeQuery(params) {
...
}
function processResponse(rsp) {
//process rsp, convert some parts, and populate model properties, like
$scope.model.prop1 = rsp.data.prop1;
}
};
现在我想创建一个与 parentController
代码 90% 相同的 Controller 。主要区别:
- get
getQueryString()
应该返回不同的查询 $scope
的响应属性 setter 应包含 1 个已更改的行- 我需要在新 Controller 内部添加额外的
filter
函数,这些函数应该只存在于新 Controller 中,而不适用于parentController
。
来自java
,我会使用继承和重写方法来解决这个问题,例如:
public cass ParentClass {
String getQueryString() {
return "?param=1&someparam=2";
}
}
public class CustomClass extends ParentClass {
@Override
String getQueryString() {
return "?customparam=1";
}
@Override
void processResponse(rsp) {
super.processResponse(rsp);
//read "rsp.paramX" additionally
}
}
但是我怎样才能用angularjs
实现类似的效果呢?
最佳答案
假设您有以下结构:
<div ng-controller="parentCtrl">
...
<div ng-controller="childCtrl"></div>
</div>
由于子 Controller 位于父 Controller 范围内,因此它可以访问父 Controller 的所有方法/变量,只要它们是在父 Controller 的 $scope
上定义的(即 $scope.someVar
)。
更新
如果 2 个 Controller 没有父/子关系,则需要使用 service ,您将在其中放置共享逻辑,然后您可以在启动序列的服务上定义一个 init 函数。
因此,在 Controller 中,您所要做的就是调用 myService.init()
(并且可能传递一些参数)
关于javascript - 如何继承和重写angularjs(java pendent)中的 Controller 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37696559/