AngularJS - 根据选择的值显示数据

14 浏览
0 Comments

AngularJS - 根据选择的值显示数据

我正在开发一个Angular应用,它有两个状态:主页列表

主页视图有一个表单用于创建列表,并显示已创建的列表

列表视图根据参数ID(例如# / lists0,# / lists1,# / lists2等)显示特定列表的内容。

我试图根据选择框的值,在主页视图上显示所选列表的内容。

以下是我目前的代码:

js/app.js

angular.module('d-angular', ['ui.router'])
// 设置路由/配置
// ------------------------------
.config(['$stateProvider', '$urlRouterProvider',
    // 设置状态提供者
    function($stateProvider, $urlRouterProvider) {$stateProvider
        // 主页状态
        .state('home', {
          url: '/home',
          templateUrl: '/static/home.html',
          controller: 'MainCtrl'
        })
        // 列表状态
        .state('lists', {
          url: '/lists{id}',
          templateUrl: '/static/lists.html',
          controller: 'ListsCtrl'
        })
        $urlRouterProvider.otherwise('home');
    }
])
// 列表工厂
// 工厂用于组织和共享应用程序中的代码。
// ------------------------------
.factory('lists', [function(){
    // 创建具有列表数组的新对象
    var o = { lists: [] };
    return o;
}])
// 主控制器
// ------------------------------
.controller('MainCtrl', ['$scope', 'lists',
    // 主要范围(用于视图)
    function($scope, lists){
        // 列表数组
        $scope.lists = lists.lists;
        // 添加列表函数
        $scope.addList = function(){
            // 防止空标题
            if(!$scope.title || $scope.title === '') { 
                return;
            }
            // 将新列表推送到数组
            $scope.lists.push({
                title: $scope.title, 
                date: new Date().toJSON().slice(0,10),
                words: [
                        // 添加默认单词
                        { title: "no",  date: new Date().toJSON().slice(0,10) },
                        { title: "yes",     date: new Date().toJSON().slice(0,10) }
                        ]
            });
            // 重置标题
            $scope.title = '';
        };
    }
])
// 列表控制器
// ------------------------------
.controller('ListsCtrl', ['$scope', '$stateParams', 'lists', '$http',
    // 主要范围(用于视图)
    function($scope, $stateParams, lists, $http){
        // 根据ID获取列表
        $scope.list = lists.lists[$stateParams.id];
        // 添加单词函数
        $scope.addWord = function(){
            // 将新单词推送到数组
            $scope.list.words.push({
                title: $scope.title,
                date: new Date().toJSON().slice(0,10)
            });
        };
    }
]);

static/home.html

  

列表

{{ word.title }} {{ word.date }}

我不确定如何从选择框中获取特定的ID值,并使用它来显示特定列表的内容。

非常感谢您的帮助。

0
0 Comments

问题出现的原因是需要根据选择的值显示数据,解决方法是将所有与列表相关的逻辑和功能移到主控制器中,以便在主视图中使用。下面是具体代码实现:

在static/main.html中:

{{ list.title }}

{{word.title}} {{word.date}}

在js/app.js中:

angular.module('d-angular', ['ui.router'])
.config(['$stateProvider', '$urlRouterProvider',
    function($stateProvider, $urlRouterProvider) {
        $stateProvider
        .state('home', {
          url: '/home',
          templateUrl: '/static/home.html',
          controller: 'MainCtrl'
        })
        .state('lists', {
          url: '/lists{id}',
          templateUrl: '/static/lists.html',
          controller: 'ListsCtrl'
        })
        $urlRouterProvider.otherwise('home');
    }
])
.factory('lists', [function(){
    var o = { lists: [] };
    return o;
}])
.controller('MainCtrl', ['$scope', '$stateParams', 'lists',
    function($scope, $stateParams, lists){
        $scope.lists = lists.lists;
        $scope.list = lists.lists[$stateParams.id];
        $scope.addList = function(){
            if(!$scope.title || $scope.title === '') { 
                return;
            }
            $scope.lists.push({
                title: $scope.title, 
                date: new Date().toJSON().slice(0,10),
                words: [
                        { title: "no",  date: new Date().toJSON().slice(0,10) },
                        { title: "yes",     date: new Date().toJSON().slice(0,10) }
                        ]
            });
            $scope.title = '';
        };
    }
]);

因此,为了在主视图中使用列表相关的逻辑和功能,将它们移到了主控制器中。尽管这种做法可能不够有条理,也不是最佳实践,但如果有任何建议或提示,将不胜感激。

0