65.9K
CodeProject 正在变化。 阅读更多。
Home

Angular MVC API 基于应用程序中的 Cassandra(第三部分)

starIconstarIconstarIconstarIconstarIcon

5.00/5 (2投票s)

2016年3月8日

CPOL

2分钟阅读

viewsIcon

10816

downloadIcon

152

关于基于 ASP.NET Web API 2 和 Cassandra NoSQL 数据库的单页 Angular 网站的一些想法

引言

在发布了第一部分第二部分之后,我决定阐明 Angular 在我的文章中的作用,并添加第三部分。现在,我们将看到如何在 Angular MVC API 和 Cassandra 基于的项目中将所有部分连接在一起。

背景

这里唯一需要讨论并且您需要熟悉的是 Angular。假设我们对其基本概念有所了解,那么我们就可以继续了。

Using the Code

首先,在项目的根目录下创建一个名为 app 的文件夹,用于存储我们的 JavaScript 文件。

这些文件是 app.jscontrollers.jsservices.js。从文件名来看,很容易理解代码内部的性质。

在上一部分中,我们添加了所有必需的 JavaScript 库,并在 index.html 中确定了我们的应用程序,并设置了 ng-view

<html ng-app="movie">
<div class="container" id="main_cont">
    <div class="" ng-view></div>
</div>

app.js 中,我们加载所有需要的模块

var <code>movie</code> = angular.module('movie', ['ngRoute', 'ngAnimate', 'ui.bootstrap', 'youtube-embed']);

并声明提供程序

movie.config(function ($routeProvider) {
    $routeProvider.
        when('/users', {
            templateUrl: 'pages/users.html',
            controller: 'usersController'
        }).
        when('/videos', {
            templateUrl: 'pages/videos.html',
            controller: 'videosController'
        }).
        otherwise({
          templateUrl: 'pages/main.html',
          controller: 'mainController'
        });
});

在这里,您可以看到对于每个路由,我们都有一个控制器和一个模板。模板存储在 pages 文件夹中。通常,即使该页面是空白的,例如主页面,我也会为每个页面创建一个控制器。

这是空白主控制器的代码

movie.controller('mainController', function ($scope) {
    $scope.hello = "Hello";
});

userController 中,代码的重要部分是

getUsers = function (page) {
        userService.getUsers(page)
       .then(
           function (data) {
               $scope.model = jQuery.parseJSON(data);
               $scope.users = $scope.model.users;
               $scope.totalItems = $scope.model.totalCount;
               console.log("totalItems: " + $scope.totalItems);
           }
       );
    };

在这里,我调用 userService 中的 getUsers 方法,然后获取结果并创建模型和 users 对象。

service.js 中,我有一个 getUsers 函数

 function getUsers(page) {
        var request = $http({
            method: "get",
            url: "api/users/"+page
        });
        console.log("api/users/" + page);
        return (request.then(handleSuccess, handleError));
    }

该方法调用 api 端点 api/users/,并且在一切顺利的情况下,它会向调用者返回一个响应

function handleSuccess(response) {
        return (response.data);
    }

users.html 中,我将模型绑定到视图,如下所示

<table class="table table-striped">
    <thead>
        <tr>
            <td>Username</td>
            <td>First name</td>
            <td>Last name</td>
            <td>Email</td>
            <td>Address</td>
            <td>Created date</td>
            <td>Action</td>
        </tr>
    </thead>
    <tr ng:repeat="u in users">
        <td>{{u.username}}</td>
        <td>{{u.firstname}}</td>
        <td>{{u.lastname}}</td>
        <td>
            <ul ng:repeat="e in u.email">
                <li>{{e}}</li>
            </ul>
        </td>
        <td>
            <div ng-if="u.address != null">
                <div>street: {{u.address.street}}</div>
                <div>city: {{u.address.city}}</div>
                <div>zip: {{u.address.zip}}</div>
                <div>
                    phones:
                    <ul ng:repeat="p in u.address.phones">
                        <li>{{p.number}}</li>
                    </ul>
                </div>
                <div>
                    location:
                    <ul ng:repeat="l in u.address.location">
                        <li>{{l}}</li>
                    </ul>
                </div>
            </div>
        </td>
        <td>{{u.timestamp}}</td>
        <td>
            <i ng-click="delete(u.username);" class="action fa fa-times"></i>&nbsp;
            <i ng-click="openToAdd(u);" class="action fa fa-pencil-square-o"></i>
        </td>
    </tr>
</table>

实际上,这是最重要的部分。其余的代码只是点缀,例如带有用户数据的模态窗口,以及用于查看 YouTube 内容的 YouTube 模块。

如果一切正常,您应该看到此屏幕

您可以下载整个项目,但请注意 CassandraEngine.cs 中的 cassandra 服务器 IP。

Cluster cluster = Cluster.Builder()
                  .AddContactPoints("192.111.111.111")
                  .WithDefaultKeyspace("videodb")
                  // .WithCredentials(user, pwd)
                  .WithQueryOptions(queryOptions)
                  .Build();

我将其设置为虚拟服务器:192.111.111.111。那里应该填写您的 Cassandra 服务器 IP。

好了,就到此为止!

感谢您的阅读。

历史

  • 2016年3月8日:初始版本
© . All rights reserved.