Angularjs过滤器:Angularjs中的子级模型和父级flilter

Angularjs过滤器:Angularjs中的子级模型和父级flilter,angularjs,angularjs-scope,Angularjs,Angularjs Scope,HTML 过滤输入: {{(x.name |大写)+','+x.country} JS: var-app=angular.module('myApp',[]); 应用程序控制器('mainCtrl',函数($scope){ $scope.names=[ {姓名:'Jani',国家:'Norway'}, {姓名:'Hege',国家:'Sweden'}, {姓名:'Kai',国家:'丹麦'} ]; }); 应用程序控制器('secondCtrl',函数($scope){ }); 简

HTML


过滤输入:

  • {{(x.name |大写)+','+x.country}
JS:


var-app=angular.module('myApp',[]);
应用程序控制器('mainCtrl',函数($scope){
$scope.names=[
{姓名:'Jani',国家:'Norway'},
{姓名:'Hege',国家:'Sweden'},
{姓名:'Kai',国家:'丹麦'}
];
});
应用程序控制器('secondCtrl',函数($scope){
});
简而言之,这个过滤器不工作

规则1:模型(测试)必须位于第二个控制器中

规则2:数据和ng repeat必须在mainCtrl中


谢谢。

您试图完成的基本任务是根据子控制器的变量筛选父控制器中的值

一种方法是在父控制器中公开
测试

我对您的
ng model
属性做了一些小更改

<script>
    var app = angular.module('myApp', []);
    app.controller('mainCtrl', function($scope) {
        $scope.names = [
            {name:'Jani',country:'Norway'},
            {name:'Hege',country:'Sweden'},
            {name:'Kai',country:'Denmark'}
        ];
    });
    app.controller('secondCtrl', function($scope) {
    });
</script>

过滤输入:

我已经向父控制器公开了相同的内容,因此在secondCntrl中所做的更改将暴露于父控制器中的
test
,并且您的过滤器工作正常

这是它的一部分。

看看那把小提琴:

问题是
filter
语句中的
test
变量与ngModel中声明的变量不同,如果输入不正确

通常,变量在父作用域中声明,并在子作用域中使用,这与您想要使用的相反

为了让父作用域使用子作用域的变量,需要注册共享该变量的服务

更新:

下面是使用服务的实现,遵循您指定的约束1。二,


这个答案也是正确的。但不幸的是,只有一个答案可以是马克·索雷尔。谢谢,这是对的。谢谢@Amit。
<script>
    var app = angular.module('myApp', []);
    app.controller('mainCtrl', function($scope) {
        $scope.names = [
            {name:'Jani',country:'Norway'},
            {name:'Hege',country:'Sweden'},
            {name:'Kai',country:'Denmark'}
        ];
    });
    app.controller('secondCtrl', function($scope) {
    });
</script>
<div ng-controller="secondCtrl">
    <p>Filtering input:</p>
    <p><input type="text" ng-model="$parent.test"></p>
</div>