не касаясь основного контроллера, вызовите расширенный контроллер и получите доступ к функции основного контроллера - PullRequest
0 голосов
/ 12 июня 2018

У меня есть основной контроллер

(function() {
    "use strict";

    function FieldSettingsOverlay($scope, localizationService, formService, userService) {
        var vm = this;
        vm.changeValidationType = changeValidationType;

        vm.validationTypes = [{
            "key": "number",
            "pattern": "^[0-9]*$"
        }, {           
            "key": "url",
            "pattern": "https?\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,}"
        }];

        function changeValidationType(selectedValidationType) {
            console.log("Parent")
        }
    }
    angular.module("umbraco").controller("UmbracoForms.Overlays.FieldSettingsOverlay", FieldSettingsOverlay);

})();

от этого родительского контроллера. У меня есть массив с именем vm.validationTypes, в настоящее время он имеет только 2 объекта, но мне нужно добавить 3 или 4 объекта.

поэтому я создал еще один контроллер путем расширения основного контроллера

// CustomValidation

angular.module("umbraco").controller('FromValidationCustomController', function ($scope, $controller) {
  'use strict';

console.log("inistiate")
  angular.extend(this, $controller('UmbracoForms.Overlays.FieldSettingsOverlay', {$scope: $scope}));
  $scope.changeValidationType=function(){

    console.log($scope.validationTypes)
  }
})

новый расширенный контроллер, использующий ту же функцию с именем changeValidationType, он даже не вызывает его, гдекак только родительская функция, вызывающая

Любая идея, что я пропускаю?почему этот контроллер внутри функции не вызывает

1 Ответ

0 голосов
/ 12 июня 2018

Отправленный код имеет проблему.Пожалуйста, проверьте обновленный раздел минимального кода, который работает:

(function(angular) {

	var module = angular.module('umbraco',[]);

	module.controller('UmbracoForms.Overlays.FieldSettingsOverlay', function($scope, $document) {
    this.validationTypes = [{
            "key": "number",
            "pattern": "^[0-9]*$"
        }, {           
            "key": "url",
            "pattern": "https?\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,}"
        }];
		this.changeValidationType = function() {
     console.log("Parent")
			return this.validationTypes;
		};
	});

})(angular);
var module = angular.module('example1',['umbraco']);
module.controller('FromValidationCustomController', function($scope, $controller) {
console.log("inistiate");
		angular.extend(this, $controller('UmbracoForms.Overlays.FieldSettingsOverlay', {$scope: $scope}));
	});
  
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.3.15/angular.js"></script>

<div ng-app="example1">
    <div ng-controller="FromValidationCustomController as C">
        <span><b>From Parent Controller:</b> {{C.changeValidationType()}}</span>
    </div>
</div>
...