我的指令创建了一个<select>模板。如何在更改时使用所选值调用函数?</select>

时间:2014-09-09 18:51:34

标签: angularjs angularjs-directive

我有这个指令。这是简化版本,只有部分不起作用:

app.directive("adminSelect", function () {
    return {
        restrict: 'A',
        require: 'ngModel',
        scope: {
            ngChange: "&",
            ngModel: "=",
            options: "="
        },
        template: '<select ng-change="ngChange()" ng-model="ngModel" ng-options="item.id as item.name for item in options">',
        controller: function ($scope, $element, $attrs) {
        }
    };
});

当我这样调用这个函数时:

<div admin-select
   ng-change="ctrl.typeChanged()"
   ng-model="ctrl.configService.admin.examTypeId"
   options="ctrl.examType.dataPlus"></div>

如何获取模型的当前值并将其提供给ctrl.typeChanged()函数?

我已经尝试过了:

typeChanged = function () {
   alert(self.configService.admin.examTypeId)
};

但是,它没有提供刚刚选择的值。它始终会警告所选的先前值。

1 个答案:

答案 0 :(得分:1)

select的值将存储在您自己的ng-Model中设置的范围变量中。现在,如果你想要的是拥有一个你希望在值改变时触发的函数,只需在你的指令的控制器中定义该函数,然后从ng-change的{​​{1}}调用它。

例如:

select

我会对您用于指令的属性的名称有点小心,因为它们可能与angular js指令冲突。

在指令定义中尝试使用它:

        template: '<select ng-change="myChangeFunct()" ng-model="mySelectVal" ng-options="item.id as item.name for item in options">',
        controller: function ($scope, $element, $attrs) {
             $scope.myChangeFunct = function(){ alert($scope.mySelectVal); };
        }

当你实例化它时:

app.directive("adminSelect", function () {
    return {
        restrict: 'A',
        require: 'ngModel',
        scope: {
            adminChange: "&",
            adminModel: "=",
            adminOptions: "="
        },
        template: '<select ng-change="adminChange()" ng-model="adminModel" ng-options="item.id as item.name for item in adminOptions">',
        controller: function ($scope, $element, $attrs) {
        }
    };
});