Javascript Angularjs:从更改事件的指令下拉列表中使用param调用控制器方法

Javascript Angularjs:从更改事件的指令下拉列表中使用param调用控制器方法,javascript,angularjs,angularjs-directive,Javascript,Angularjs,Angularjs Directive,我做了一个下拉指令。从下拉列表中选择值时,将调用控制器中的方法,并通过所选过滤器。除了方法总是返回默认的选定值之外,其他一切都正常工作,无论选择了什么 html: <div ng-controller="Ctrl"> <div> <dropdown filters="filters" filter="filter" select="selectFilter(filter)"></dropdown> </di

我做了一个下拉指令。从下拉列表中选择值时,将调用控制器中的方法,并通过所选过滤器。除了方法总是返回默认的选定值之外,其他一切都正常工作,无论选择了什么

html:

<div ng-controller="Ctrl">
    <div>
          <dropdown filters="filters" filter="filter" select="selectFilter(filter)"></dropdown>
    </div>
</div>

javascript:

var app = angular.module('app', []);

function Ctrl($scope){

    $scope.filters = [
       { Id: 1, Name: "All" }, { Id: 2, Name: "filter1" }, { Id: 3, Name: "filter2" }, { Id: 4, Name: "filter3"}
    ];

    $scope.filter = $scope.filters[0];

    $scope.selectFilter = function(selectedFilter){
      alert(selectedFilter.Name);  
    };
}

app.directive('dropdown', function(){
    return {
        restrict: "E",
        scope: {
            filter: "=",
            filters: "=",
            select: "&"
        },
        template: "<select ng-model=\"filter\" ng-change=\"select(filter)\" ng-options=\"f.Name for f in filters\"></select>"

    };
});
var-app=angular.module('app',[]);
函数Ctrl($scope){
$scope.filters=[
{Id:1,Name:“All”},{Id:2,Name:“filter1”},{Id:3,Name:“filter2”},{Id:4,Name:“filter3”}
];
$scope.filter=$scope.filters[0];
$scope.selectFilter=函数(selectedFilter){
警报(selectedFilter.Name);
};
}
app.directive('dropdown',function(){
返回{
限制:“E”,
范围:{
过滤器:“=”,
过滤器:“=”,
选择“&”
},
模板:“”
};
});

工作小提琴:

调用方法绑定时使用了错误的语法

尝试:


我做了这个,但另一个答案似乎更好:p

var-app=angular.module('app',[]);
函数Ctrl($scope$element){
$scope.filters=[
{Id:1,Name:“All”},{Id:2,Name:“filter1”},{Id:3,Name:“filter2”},{Id:4,Name:“filter3”}
];
$scope.filter=$scope.filters[0];
}
app.directive('dropdown',function(){
返回{
限制:“E”,
范围:{
过滤器:“=”,
过滤器:“=”,
},
模板:“”,
控制器:函数($scope$element){
$scope.selectFilter=函数(selectedFilter){
警报(selectedFilter.Name);
}
}   
}
});

不是,它返回的是以前的值而不是新值,因为您发送到函数的内容您发送以前的值是正确的,但是我如何让它发送新值呢?谢谢,这很有效。您能解释一下“{filter:filter}”部分吗?@Mdb:first
filter
是表达式中的参数名
selectFilter(filter)
,第二个
filter
是参数的名称value@KhanhTO你能详细解释一下吗,我得承认我不明白这是怎么回事。@Mosho:用表达式
selectFilter(filter)
,我们指定此函数有一个命名参数(
filter
)。要在指令中调用它,必须同时指定参数的名称及其值。@KhanhTO但是,如果您只执行OP所执行的操作,而不是您所执行的操作,为什么它会将以前的值作为参数获取呢?(我知道我们不应该在这里聊天,但我不明白,我想其他人也不会)
ng-change=\"select({filter:filter})\
var app = angular.module('app', []);

function Ctrl($scope, $element){

    $scope.filters = [
       { Id: 1, Name: "All" }, { Id: 2, Name: "filter1" }, { Id: 3, Name: "filter2" }, { Id: 4, Name: "filter3"}
    ];

    $scope.filter = $scope.filters[0];

}

app.directive('dropdown', function(){
    return {
        restrict: "E",
        scope: {
            filter: "=",
            filters: "=",
        },
        template: "<select ng-model=\"filter\" ng-change=\"selectFilter(filter)\" ng-options=\"f.Name for f in filters\"></select>",
        controller: function($scope, $element) {
            $scope.selectFilter = function(selectedFilter) {
                alert(selectedFilter.Name);  
            }
        }   
    }
});