2015-03-31 26 views
0

的jsfiddle:http://jsfiddle.net/s0ngtz8j/計算場所在外部範圍

我有一個外控制器:OuterCtrl。屬性「名稱」在OuterCtrl的範圍內。

在OuterCtrl的範圍,我有內部控制器:InnerCtrl。屬性「後綴」在InnerCtrl的範圍內。

我需要在外部和內部控制器的計算屬性FullName(=名稱+後綴)。在上面給出的jsfiddle中,我可以在InnerCtrl中獲得FullName。我如何使它在OuterCtrl中可用?

HTML:

<div ng-app="myApp"> 
    <div ng-controller="OuterCtrl"> 
     Name: <input type="text" ng-model="Name"> 
     <br> 
     (Outer) Name : <strong>{{Name}}</strong> 
     <br> 
     (Outer) Full Name: {{FullName}}  
     <div ng-controller="InnerCtrl"> 
      Suffix: <input type="text" ng-model="Suffix"> 
      <br> 
      (Inner) Name: {{Name}} 
      <br> 
      (Inner) Full Name: {{FullName}} 
     </div> 
    </div> 
</div> 

JS:

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; 
    }); 
}); 

這是增強一個複雜的應用程序,我的工作的簡化問題。名稱屬性必須留在OuterCtrl中。後綴必須留在InnerCtrl中。 FullName是我需要添加的一項新功能,可以放在任何地方。要解決

回答

0

一種方法是把所有的模型中的對象之內,所以它會被家長和孩子控制器共享。

看一看這個http://jsfiddle.net/83stdLy4/1/

基本上所有的邏輯是主控制器,但它也可能是個孩子之一。

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; 
    }); 
}); 
+0

感謝您的回覆。但這個問題是我工作的商業應用程序的簡化版本。那麼是否通過在OuterCtrl中維護名稱並在InnerCtrl中保留後綴來添加新代碼? FullName是我可以在任何地方保留的新功能..可能位於共享工廠中。你能否指出如何解決這個問題。 – Ferny 2015-03-31 23:42:00

+0

@Ferny是的,你可以擁有所有的邏輯子控制器與後綴,所有的交易,只要編輯'$ scope.dude.something',而不是直接'$ scope.something',這些變化將是可訪問的還來自父控制器。 – floribon 2015-03-31 23:43:33

+0

@Ferny檢查更新的jsfiddle,讓我知道這是否回答您的問題http://jsfiddle.net/83stdLy4/1/ – floribon 2015-03-31 23:44:31