我不知道如何解释我的问题, 好的,让我试试,
如何从具有相同div
名称的其他controller
传递值?
<div ng-controller="myCtrl">
<select ng-model="filterBy" ng-options="filtration.title for filtration in filter_preferences"></select>
</div>
---------------------------------------------------
<div ng-controller="myCtrl">
<select ng-model="filterBy" ng-options="filtration.title for filtration in filter_preferences"></select>
<ul>
<li ng-repeat="vals in datas | filter: vals.completed = filterBy.value">{{vals.title}}</li>
</ul>
</div>
从第二个div
开始,当我过滤我工作正常,但相同的过滤器我在顶部使用相同的controller
,但它不起作用。
答案 0 :(得分:2)
问题在于每个ng-controller
下都会创建一个新的$ scope。这意味着它们根本不共享$scope
,并且还有两个不同的控制器实例。
因此,要在两个控制器之间进行通信,通常的做法是使用服务。
I've updated your plunk with a very basic example.
这个想法是你创建一个像:
这样的服务app.value('sharedData', { filteredBy: true});
然后将其注入您的控制器并将其放在您的示波器上,如下所示:
app.controller('MyCtrl', function($scope, sharedData) {
$scope.sharedData = sharedData;
});
之后,您将其用作ng-model值和过滤器:
<select ng-model="sharedData.filteredBy" ng-options="x.value as x.title for x in filter_preferences"></select>
<ul>
<li ng-repeat="vals in datas | filter: { completed: sharedData.filteredBy }">{{vals.title}}</li>
</ul>
从那里它将起作用,因为两个控制器(和$ scopes)现在都有一个相同对象的实例......你的sharedData
服务。
答案 1 :(得分:1)
您需要指定 NG-控制器=&#34; myCtrl&#34; ng-app所在的位置,并删除所有其他ng-controller语句。这是因为无论何时尝试在单个div中执行ng-controller,它都会为该特定div创建一个本地范围,然后下拉列表中的任何更改都会刷新本地范围。
代码:
<body ng-app="myApp" ng-controller="myCtrl">
<div >
<select ng-model="$parent.filterBy" ng-options="filtration.title for filtration in filter_preferences"></select>
</div>
---------------------------------------------------
<div>
<select ng-model="$parent.filterBy" ng-options="filtration.title for filtration in filter_preferences"></select>
<ul>
<li ng-repeat="vals in datas | filter: vals.completed = $parent.filterBy.value">{{vals.title}}</li>
</ul>
</div>
</body>
控制器代码更改donw:
$rootScope.filterBy = $scope.filter_preferences[1];
之前是:
$scope.filterBy = $scope.filter_preferences[1];
<强>更新强>
您可以在rootScope上使用filterBy变量而不是本地范围。因此,本地范围的任何更改都将在根级别完成,更改将反映在任何地方
在你的plunker中尝试了这个并且它正在工作。
答案 2 :(得分:-1)
你不能在ng-app
下两次提到控制器