【问题标题】:ASP.NET MVC 6 Angular JS Table UpdateASP.NET MVC 6 Angular JS 表更新
【发布时间】:2015-07-12 10:06:56
【问题描述】:

我目前正在学习新的 MVC 6 并完全坚持简单的操作 - 表数据更新项目选择更改。所需的行为是加载属于选定问题块的问题

我有 angularJS 工厂:

(function () {
    'use strict';

    angular
        .module('questionBlockApp')
        .factory('questionBlockService', questionBlockService);

    var questionBlockService = angular.module('questionBlockService', ['ngResource']);

    questionBlockService.factory('Blocks', ['$resource',
    function ($resource) {
        return $resource('/api/blocks/', {}, {
            query: { method: 'GET', params: {}, isArray: true }
        });
    }]);

    questionBlockService.factory('Questions', ['$resource',
    function ($resource) {
        return $resource('/api/blocks/:blockId', {blockId : '@blockId'}, {
            query: { method: 'GET', params: {}, isArray: true }
        });
    }]);

})();

控制器,在选择更改函数中内置了刷新函数(loadQuestions):

(function () {
    'use strict';

    angular
        .module('questionBlockApp')
        .controller('questionBlockController', questionBlockController);
        //.controller('questionController', questionController);

    questionBlockController.$inject = ['$scope', 'Blocks', 'Questions'];
    //questionController.$inject = ['$scope', 'Questions'];

    function questionBlockController($scope, Blocks, Questions) {
        $scope.selectedBlock = 2;

        if ($scope.Blocks == undefined | $scope.Blocks == null) {
            $scope.Blocks = Blocks.query();
        }

        $scope.setSelected = function (blockId) {
            $scope.selectedBlock = blockId;
            $scope.loadQuestions();
        }
     
        $scope.loadQuestions = function () {
            $scope.data = Questions.query({ blockId: $scope.selectedBlock });
            $scope.data.$promise.then(function (data) {
                $scope.Questions = data;
            });
        };

        $scope.loadQuestions();
    }

})();

和观点:

调用 setSelected 的视图:

 <table class="table table-striped table-condensed" ng-cloak ng-controller="questionBlockController">
                <thead>
                  ...
                </thead>
                <tbody>
                    <tr ng-repeat="block in Blocks" ng-click="setSelected(block.Id)" ng-class="{'selected': block.Id == selectedBlock}">
                        <td>{{block.Id}}</td>
                        <td>{{block.Name}}</td>
                        <td>{{block.Created}}</td>
                    </tr>
                </tbody>
            </table>

 <table id="test" ng-controller="questionBlockController">
                    <thead>
                        <tr>
                            ...
                        </tr>
                    </thead>
                    <tbody>
                        <tr ng-repeat="question in Questions">
                            <td>{{question.Id}}</td>
                            <td>{{question.Text}}</td>
                            <td>{{question.TimeLimit}}</td>
                            <td>{{question.Updated}}</td>
                        </tr>
                    </tbody>
                </table>

当我点击 QuestionBlock 表中的不同项目时,$scope.Questions 会正确更新,但表没有反映更改,就好像不存在绑定一样。

【问题讨论】:

  • 所以这总是显示与selectedBlock = 2 rt 相关的数据??或者你在哪里绑定ng-click 指令来调用setSelected 函数??
  • 是的,对不起,ng-click 在另一个表中,显示问题块

标签: javascript angularjs asp.net-core-mvc


【解决方案1】:

好吧,我只是有点受伤。 定义了两个 questionBlockController 控制器,导致不同范围的初始化 => 两个 $scope.Questions 对象存在 => 在块范围内发生刷新,这是不希望的行为。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-17
    • 2019-02-23
    • 2021-05-19
    • 2017-05-05
    • 2016-10-04
    • 2020-05-02
    • 1970-01-01
    相关资源
    最近更新 更多