使用MEAN堆栈 - 查询MongoDB并将值作为变量传递

时间:2015-04-03 15:22:45

标签: javascript angularjs node.js mongodb mean

我正在使用MEAN堆栈来创建一个Web应用程序。我有我的server.js,console.js,一个名为'联系人列表'的MongoDB,以及一个包含树图的Javascript的index.html。我想要做的是查询我的MongoDB说,一个键,并返回其值(或实际上只是获取任何信息)。我想将该值保存为变量并将其传递给index.html中包含的javascript。

这是我最接近重建教程的代码。使用mongojs作为我的驱动程序,我在server.js中有这个:

app.get('/contactlist', function (req, res) {
console.log("I received a GET request")

db.contactlist.find({email:"bob11@email.com"},function(err, docs) {
//looks at the contact list database for anything with the email of bob11@email.com
    console.log(docs);
    res.json(docs);
});
});

在我的控制器中:

var myApp = angular.module('myApp', []);
myApp.controller('AppCtrl', ['$scope', '$http', function($scope, $http) {
console.log("Hello World from controller");

var refresh = function() {
$http.get('/contactlist').success(function(response) {
    console.log("I got the data I requested");
    $scope.contactlist = response;
    $scope.contact = "";
});
};

下面使用ng-repeat功能是原始应用程序使用的工件(显示所有联系人的列表)。现在我只想要一个值,但我不知道要使用什么功能。这是我的index.html:

<div class="container" ng-controller="AppCtrl">
    <table class="table">
        <thead>
            <tr>
        </thead>
        <tbody>
            <tr ng-repeat="contact in contactlist">
                <td>{{contact.name}}</td>
                <!-- grabs the name from parameters set out in server.js -->
            </tr>
        </tbody>
    </table>
</div>

这会将我过滤的电子邮件(bob11@email.com)的名称(&#34; Bob&#34;)显示在网页上。此时,即使只是将该名称保存为变量并将其传递给javascript也会有所帮助。 Ng-repeat绝对不是我想要使用的,但我是编程和MEAN堆栈的新手,所以我有点卡住了。

感谢。

2 个答案:

答案 0 :(得分:1)

我不完全确定你在问什么,但我会尽力帮忙。

如果您询问如何编辑客户端上的contact.name变量,您可能应该熟悉Angular's two way data binding。这意味着控制器中对$ scope的任何更改都将影响HTML中显示的数据,并且对html中变量的任何更改都将应用于$ scope。

例如,如果要编辑页面上的contact.name,可以使用绑定到contact.name的输入文本字段作为其模型。为此,我们需要ng-model在输入字段和我们想要更改的值之间建立桥梁。可能看起来像这样

  <ul>
    <li ng-repeat="contact in contactlist">
      Name: <input type="text" ng-model="contact.name"/>
    </li>
  </ul>

然后我们可以在输入中添加ng-change属性以执行更改操作。 See working demo here

答案 1 :(得分:0)

第一个解决方案: 你可以在你的html页面和绑定机制中使用ng-init,就像这样

<div ng-init="param='value';">
    <div ng-controller="yourController" >
        <label>param: {{value}}</label>
    </div>
</div>

现在您在html文件中使用的任何参数都可用于您的控制器功能

function yourController($scope) {
        console.log($scope.param);
}

第二种解决方案: 你可以提供一个服务来传递像这样的控制器中的值

var app = angular.module('myApp', []);

app.factory('valuepassing', function() {

    var myvaluepassingService = {};
         data =[];
    myvaluepassingService.addvalue = function(value) {
        data.push(value);
    };
    myvaluepassingService.removevalue = function(value) {
        var index = data.indexOf(value);
        data.splice(index, 1);
    };
    myvaluepassingService.data = function() {
        return data;
    };

    return myvaluepassingService;
});

function MyCtrl($scope, valuepassing) {
    $scope.newvalue = {};
    $scope.valuepassing = valuepassing;    
}