在我的应用程序中,我有一个带有select标签的自定义指令。
<div class="row pv10" ng-if="item.visible">
<div class="col-xs-4 text-danger"><span ng-if="item.label_visible"> {{item.label}}</span></div>
<div class="col-xs-8">
<div class="row">
<div class="col-xs-1">
<select ng-options="oneItem for oneItem in item.options" ng-model="selectedItem" ng-change="changeEvent()">
{{selectedItem | json}}
</select>
</div>
</div>
</div>
</div>
我想对每个变更事件执行操作。我试着使用ng-change,顺便说一句。使用radioBtn / checkBox工作得很好。我在这里尝试了两种方法。
首先,我尝试将“changeEvent”函数传递给指令的隔离范围。
<custom-select item='item' change-event="change()" ng-if="item.component == 'select'" />
changeEvent()函数存在于当前控制器中(附加到持有自定义选择的视图)
scope: {
item: "=",
changeEvent: "&"
}
可悲的是,表达不会对变化进行评估。 其次,我试图将函数直接附加到指令
link: function ($scope, elems, attrs) {
$scope.changeEvent = function () {
alert("Change Event!");
}
}
但它也没有用。
我在某处读到,即使在自定义指令中使用的ng-change也在控制器范围内运行,而不是隔离的指令范围。但是我不太确定。 我非常感谢你的帮助。 谢谢!
这是我使用的指令的JSFiddle。如果我应该提供更多细节,请告诉我,这是我第一次使用jsfiddle。
这是调用指令的方式:
<div class="row" ng-repeat="item in jsonData">
<div class="col-xs-12">
<cbp-select item='item' change="change()" ng-if="item.component == 'select'" />
</div>
</div>
https://jsfiddle.net/60nsfg0L/
当我将我的解决方案上传到我们的本地服务器时,它开始正常工作。(是的,我清理了浏览器的现金,我的本地人也用wamp / iss缓存)。 但现在我有一个不同的问题。 我有一个由不同指令构建的表单(如上面的那个),都有ng-click / change / blur。在我改变“select”指令中的一个选项之前,一切似乎都能正常工作。选择其中一个值后,触发ng-change表达式(因为它不仅仅是一个简单的警报),从那一刻开始,我无法专注于任何其他元素。奇怪的是,如果我导致ng-change触发任何其他元素,无论是radiobtn还是checkbox,都不会发生此问题