2017-01-02 8 views
0

У меня есть компонент, позволяет сказать COMx,Угловая 1,5 вызывающий компонент нг-изменение infinitily

angular.component('comx', { 
    templateUrl: 'someUrl', 
    bindings: { 
     model: '=', 
     onChng: '=' 
    } 
} 

и его HTML является

<input ng-model="vm.model" ng-change="vm.onChng"> 

и я добавляю этот компонент в другом шаблоне, как

<comx model="vm.data" on-chng="vm.test(vm.data)"> 

vm.test = function (val) { 
    console.log(val); // val is printing infinitly 
} 

консоль вышеприведенной функции является держать на печать

+1

Почему бы не использовать '&' для выражения? это должно быть 'onChng: '&'' вместо этого –

+0

пробовал это уже, но странно его предоставление предыдущих данных vm.data не новое. –

+0

Вы можете воспроизвести проблему в плункер/скрипке? –

ответ

1

@pankj: почему бы не использовать & для выражения?

@amir: попробовал это уже, но странно его предоставление предыдущих данных vm.data не новое.

Это происходит потому, что привязка в двух направлениях = использует наблюдателя для переноса данных из области выделения в родительскую область. Это происходит в цикле грязной проверки после операции ng-change.

Для того, чтобы сразу же обеспечить изолята значение области, подвергать его в качестве локальной переменной:

angular.component('comx', { 
    template: '<input ng-model="$ctrl.model" '+ 
       '  ng-change="$ctrl.onChng({$model: $ctrl.model})">', 
    bindings: { 
     model: '=', 
     onChng: '&' 
    } 
}); 

Использование:

<comx model="vm.data" on-chng="vm.test($model)"> 
</comx> 
vm.test = function (val) { 
    console.log(val); 
}; 

Подвергая модель в качестве локальной переменной, ее доступно сразу для функции в родительской области.

DEMO on JSFiddle.

+0

Неверно здесь 'ng-change =" $ ctrl.onChng ({$ model: $ ctrl.model}) 'в шаблоне компонента. Это правильно передаст значение, но то, что я хочу, является настраиваемой функцией, параметрами функция должна быть указана в родительском контроллере, где вызывается компонент. При изменении просто запускается эта функция. –