наследующий контроллер в angular1.x

59
6

С угловым 1,6 у меня есть ситуация, когда с разными представлениями около 60% логики контроллера одинаковы. В этом случае, как я могу применить наследование логики контроллера? Я перешел на http://blog.mgechev.com/2013/12/18/inheritance-services-controllers-in-angularjs/ и http://jasonwatmore.com/post/2014/03/25/angularjs-a -Лучше-путь к реализации-а-базовый-контроллер

и написал пример кода для применения в моем случае, но это не работает.

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script type="text/javascript" src="https://unpkg.com/angular@1.6.6/angular.min.js">
</script>
</head>
<body ng-app="test">

<div class="" ng-controller="Child1 as ctrl1">
<input type="text" name="name" value="">
<button type="button" name="button" ng-click="ctrl1.clickMethod()">ClickA</button>
</div>

<div class="" ng-controller="Child2 as ctrl2">
<input type="text" name="name" value="">
<button type="button" name="button" ng-click="ctrl2.clickMethod()">ClickB</button>
</div>

<script type="text/javascript">

angular.module('test',[])
.controller('Base', function(){

var sharedMethod = function(arg) {
console.log('shared method called with ' + arg);
}
})
.controller('Child1', function($scope, $controller) {

$controller('Base', { $scope : $scope});
var ctrl1 = this;
var clickMethod = function() {
this.sharedMethod(41);
};
})
.controller('Child2', function($scope, $controller) {

$controller('Base', { $scope : $scope});
var ctrl2 = this;
var clickMethod = function() {
this.sharedMethod(42);
};
})
</script>
</body>
</html>

sharedMethod - это то, что я хочу разделить с двумя разными представлениями, имея другой контроллер.

Более того, в этом примере я создал контроллер (Base), который не имеет никакого представления, возможно ли это с угловым?

спросил(а) 2017-11-02T08:54:00+03:00 2 года, 2 месяца назад
1
Решение
68

В вашем коде есть некоторые ошибки в том, как вы определили свои функции, необходимые для внесения следующего изменения:

 angular.module('test',[]).controller('Base', function($scope){

$scope.sharedMethod = function(arg) {
console.log('shared method called with ' + arg);
}
})
.controller('Child1', function($scope, $controller) {

$controller('Base', { $scope : $scope});
var ctrl1 = this;
ctrl1.clickMethod = function() {
$scope.sharedMethod(41);
};
})
.controller('Child2', function($scope, $controller) {

$controller('Base', { $scope : $scope});
var ctrl2 = this;
ctrl2.clickMethod = function() {
$scope.sharedMethod(42);
}

});

вам нужно правильно вызвать функции, чтобы они работали.

ответил(а) 2017-11-02T09:14:00+03:00 2 года, 2 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема