ng-change不会触发

时间:2015-07-20 12:35:06

标签: javascript angularjs

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

有什么建议吗?谢谢你的帮助。

1 个答案:

答案 0 :(得分: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等)没有任何意义。