ng-change никак не вызывает мою функцию, вот представление;
<div ng-controller="widgets.lunchMenu as vm">
<label class="btn btn-transparent grey-salsa btn-circle btn-sm active">
<input type="radio" name="options" class="toggle" id="option1" ng-model="vm.takeCount" ng-value="0" ng-change="vm.getLunchMenus()">@L("Today")
</label>
<label class="btn btn-transparent grey-salsa btn-circle btn-sm">
<input type="radio" name="options" class="toggle" id="option2" ng-model="vm.takeCount" ng-value="7" ng-change="vm.getLunchMenus()">@L("Week")
</label>
<label class="btn btn-transparent grey-salsa btn-circle btn-sm">
<input type="radio" name="options" class="toggle" id="option3" ng-model="vm.takeCount" ng-value="30" ng-change="vm.getLunchMenus()">@L("Month")
</label>
</div>
вот контроллер:
(function () {
appModule.controller('widgets.lunchMenu', [
'$scope', 'abp.services.app.lunch',
function ($scope, appService) {
var vm = this;
var today = new Date();
var month = today.getMonth();
vm.getLunchMenus = function () {
appService.getLunchMenus({ month: month + 1, takeCount: vm.takeCount }).success(function (data) {
vm.menus = data.items;
});;
};
vm.getLunchMenus();
}
]);
})();
любое предложение? Спасибо за помощь.
Чтобы директива ng-change
могла видеть функцию vm.getLunchMenus
, она должна находиться в области $scope
. Поэтому вам нужно будет что-то сделать:
$scope.vm = this;
$scope.vm = function() { ... }
Затем в вашей разметке вы можете делать то, что вы делаете, с
ng-change="vm.getLunchMenus()"
Или вы можете просто сделать что-то простое
$scope.getLunchMenus = function() { ... }
Затем в разметке:
ng-change="getLunchmenus()"
Полностью устраните необходимость в переменной vm
, так как this
действительно ничего не значит для директив (ng-change
и т.д.) В разметке.
$scope
вместо этого, что вряд ли решит их основную проблему - функция не запускается.
vm = $scope
или измените привязку на$scope.getLunchMenus()
. Ваш HTML взаимодействует только с переменными и функциями$scope
.