将ng-change传递给指令

时间:2014-03-07 19:07:13

标签: angularjs angularjs-directive

我们有一个指令,它由select元素组成,如下所示

<select class="form-control" ng-if="type === 'select'" name="{{ bsName }}" id="{{ bsName }}"
            ng-model="$parent.ngModel" ng-change="$parent.ngChange" ng-options="(item.label || item) for item in items" ng-selected="(item.value && $parent.ngModel == item.value) || $parent.ngModel == item">

在我们看来,我们使用它如下

<bs-input type="select" items="cars" bs-name="car" bs-label="Car" ng-model="criteria.car" bs-errors="errors" ng-change="onChange()"/>

但是当我从列表中选择一个不同的值时,onChange()不会被触发。将其作为

传递
ng-change="$parent.ngChange" 

正确?我错了什么吗?

注意:当我不使用指令并在我的视图中直接选择时,一切正常。

1 个答案:

答案 0 :(得分:1)

调用$parent.ngChange将尝试访问父作用域上的属性ngChange。 上的ng-change 属性是完全不同的。

调用$parent.onChange()可能会有效,因为您现在正在直接调用该函数。但是,我希望你能看到这里的缺点,因为我们正在硬编码你要调用的函数,这不是你的意图。

另外,我假设您在指令中使用隔离范围,在这种情况下调用$ parent没有意义(它可以工作,但您希望指令独立于父范围)。

您可以查看使用$ parse来获取从外部范围传递的函数。

相关问题