2014-05-08 64 views
1

我有兩頁包含幾乎相同的表格。唯一的區別是父範圍中的一些對象的措辭和值。我如何告訴視圖或控制器使用一個範圍變量而不是另一個?以角度重新使用偏角和控制器

人爲的例子:

myApp.controller('ParentController', function($scope) { 
    $scope.container = { 
     someA: { a: 1, b: 3 }, 
     someB: { a: 2, b: 4 } 
    } 
}); 

myApp.controller('ChildController', function($scope) { 
    // Some scope variable that gets the value of container.someA 
    // or container.someB 

    $scope.result = $scope.someValue.a + $scope.someValue.b; 
}); 

然後我可以在使用相同的模板兩個子視圖使用$scope.result

<div ng-controller="ParentController"> 
    <!-- Include #1 --> 
    <div ng-include="someTemplate.html" ng-controller="ChildController"></div> 
    <!-- Include #2 --> 
    <div ng-include="someTemplate.html" ng-controller="ChildController"></div> 
</div> 

我怎麼能告訴包括#1使用的$scope.container.someA值,包括#2使用的$scope.container.someB值是多少?

+0

使用通用表單並利用routeProvider的resolve屬性根據位置指定正確的值。每個控制器都會通過它的聲明注入這個值。所以如果你有2個URL,你會聲明兩個不同的值,它們會根據'$ routeProvider'的'resolve'屬性中的當前URL來饋送。 – Mik378

+0

沒有兩個URL。包含在同一個URL /視圖中同時顯示。 – Adrian

回答

1

這是一個指令的典型案例。

app.directive("name", function() { 
    return { 
     restrict: "A", 
     templateUrl: "someTemplate.html", 
     scope: { 
      someValue: "=" 
     }, 
     controller: function($scope) { 
      $scope.result = $scope.someValue.a + $scope.someValue.b; 
     } 
    }; 
}); 

使用它作爲:

<div ng-controller="ParentController"> 
    <!-- Include #1 --> 
    <div my-template some-value="container.someA"></div> 
    <!-- Include #2 --> 
    <div my-template some-value="container.someB"></div> 
</div> 

你必須注意隔離的範圍,但它確實繼承的東西從父範圍;因此你將不得不通過你想要的任何數據在指令中,就像scope: { someValue: "=" }一樣。