Angularjs 外部范围中需要来自内部范围的计算属性

Angularjs 外部范围中需要来自内部范围的计算属性,angularjs,Angularjs,jsfiddle: 我有一个外部控制器:OuterCtrl。属性名称在OuterCtrl的范围内 在OuterCtrl的范围内,我有一个内部控制器:InnerCtrl。属性后缀在InnerCtrl的范围内 我需要在外部和内部控制器中都有一个计算属性FullName=Name+后缀。在上面给定的JSFIDLE中,我能够在InnerCtrl中获得全名。我将如何在OuterCtrl中提供它 HTML: 这是一个简化的问题,我正在开发一个复杂的应用程序。Name属性必须保留在OuterCtrl中。后缀必

jsfiddle:

我有一个外部控制器:OuterCtrl。属性名称在OuterCtrl的范围内

在OuterCtrl的范围内,我有一个内部控制器:InnerCtrl。属性后缀在InnerCtrl的范围内

我需要在外部和内部控制器中都有一个计算属性FullName=Name+后缀。在上面给定的JSFIDLE中,我能够在InnerCtrl中获得全名。我将如何在OuterCtrl中提供它

HTML:


这是一个简化的问题,我正在开发一个复杂的应用程序。Name属性必须保留在OuterCtrl中。后缀必须保持在InnerCtrl中。全名是一个新的功能,我需要添加,我可以适应任何地方

解决此问题的一种方法是将所有模型放在一个对象中,以便父控制器和子控制器共享该对象

看看这个

基本上所有逻辑都在主控制器中,但也可以在子控制器中

myApp.controller('OuterCtrl', function ($scope) {
  $scope.dude = {};
  $scope.dude.Name = "Adam";
  $scope.dude.Suffix = "Jr.";

  $scope.$watch('dude.Name + dude.Suffix', function () {
    $scope.dude.FullName = $scope.dude.Name + ' ' + $scope.dude.Suffix;
  });
});

谢谢你的回复。但这个问题是我正在使用的商业应用程序的简化版本。那么,通过在OuterCtrl中维护名称并在InnerCtrl中维护后缀来添加新代码是否有解决方案呢?全名是一项新功能,我可以在任何地方保留。。可能在共享工厂中。你能告诉我怎么解决这个问题吗。@Ferny是的,你可以在子控制器中拥有处理后缀和所有的逻辑,只要它编辑$scope.dude.something而不是直接编辑$scope.something,更改也可以从父控制器访问。@Ferny检查更新的JSFIDLE,如果这回答了您的问题,请告诉我,非常感谢。我想这对我有用。我明天早上在办公室试试这个,我在东部时间。我现在无法访问业务代码来尝试:
var myApp = angular.module('myApp', []);

myApp.controller('OuterCtrl', function ($scope) {
    $scope.Name = "Adam";

});

myApp.controller('InnerCtrl', function ($scope) {
    $scope.Suffix = "Jr.";
    $scope.FullName = $scope.Name + " " + $scope.Suffix;
    $scope.$watch('Name + Suffix', function() {
       $scope.FullName = $scope.Name +' '+$scope.Suffix;
    });
});
myApp.controller('OuterCtrl', function ($scope) {
  $scope.dude = {};
  $scope.dude.Name = "Adam";
  $scope.dude.Suffix = "Jr.";

  $scope.$watch('dude.Name + dude.Suffix', function () {
    $scope.dude.FullName = $scope.dude.Name + ' ' + $scope.dude.Suffix;
  });
});