代码之家  ›  专栏  ›  技术社区  ›  Gayathri Mohan

无需触摸核心控制器即可调用扩展控制器并访问核心控制器功能

  •  0
  • Gayathri Mohan  · 技术社区  · 8 年前

    我有一个核心控制器

    (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个对象。

    所以我通过扩展核心控制器创建了另一个控制器

    //自定义验证

    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 回复  |  直到 8 年前
        1
  •  0
  •   I. Ahmed    8 年前

    发布的代码有问题。 请查看最新的最低代码部分:

    (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>