我们有一个指令,它由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"
正确?我错了什么吗?
注意:当我不使用指令并在我的视图中直接选择时,一切正常。
答案 0 :(得分:1)
调用$parent.ngChange
将尝试访问父作用域上的属性ngChange。 ng-change
属性是完全不同的。
调用$parent.onChange()
可能会有效,因为您现在正在直接调用该函数。但是,我希望你能看到这里的缺点,因为我们正在硬编码你要调用的函数,这不是你的意图。
另外,我假设您在指令中使用隔离范围,在这种情况下调用$ parent没有意义(它可以工作,但您希望指令独立于父范围)。
您可以查看使用$ parse来获取从外部范围传递的函数。