нг-изменение не срабатывает

0

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();
    }
]);
})();

любое предложение? Спасибо за помощь.

  • 0
    Какую версию angular вы используете?
  • 1
    Предложение: определите vm = $scope или измените привязку на $scope.getLunchMenus() . Ваш HTML взаимодействует только с переменными и функциями $scope .
Показать ещё 3 комментария
Теги:

1 ответ

1

Чтобы директива 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 и т.д.) В разметке.

  • 1
    На плакате не показан полный HTML-код, в котором определен контроллер, но, похоже, он использует синтаксис ControllerAs, который является допустимым способом структурирования данных; Вы предлагаете здесь отказаться от этого синтаксиса и вернуться к использованию $scope вместо этого, что вряд ли решит их основную проблему - функция не запускается.
  • 0
    Клэйс прав. Я использую синтаксис ControllerAs, который охватывает VM. Проблема в другом.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню