我对一个名为on-change的元素有一个指令。这个想法是当选定的值发生变化时,它会保存在范围变量中,然后另一个元素会将其选中。
我的问题是,如果上面的元素是静态的,上面的工作正常,但如果我使用ng-repeat,则onchange停止工作。
<select on-change="myvar" ng-repeat="(key, value) in dataset">
<option value="{{key}}">{{value.name}}</option>
</select>
这是我的onchange指令:
.directive('onChange', function() {
return {
restrict: 'A',
scope:{'onChange':'=' },
link: function(scope, elm, attrs) {
scope.$watch('onChange', function(nVal) { elm.val(nVal); });
elm.bind('blur', function() {
var currentValue = elm.val();
if( scope.onChange !== currentValue ) {
scope.$apply(function() {
scope.onChange = currentValue;
});
}
});
}
};
})
关于如何克服这个问题的任何想法?
由于
答案 0 :(得分:0)
您可以使用ng-model
和$watch
来捕捉任何更改。为了重复使用它,您实际上可以将代码略微修改为$watch
ngModel
。
(我只是猜测你打算用多个选项制作一个select
,而不是多个select
一个选项,所以我相应地更改了这个<) / p>
<select ng-model="myvar" on-change>
<option ng-repeat="(key, value) in dataset" value="{{key}}">{{value.name}}</option>
</select>
新链接功能:
link: function(scope, elm, attrs) {
scope.$watch(attrs.ngModel, function (newVal, oldVal) {
if(newVal !== oldVal) {
//Change happened, react accordingly
}
});
}
请参阅我的类似答案here
答案 1 :(得分:0)