Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 如何使用当前视图中刚刚渲染的参数值调用角度控制器函数?_Angularjs_Node.js_Mongodb_Mongoose - Fatal编程技术网

Angularjs 如何使用当前视图中刚刚渲染的参数值调用角度控制器函数?

Angularjs 如何使用当前视图中刚刚渲染的参数值调用角度控制器函数?,angularjs,node.js,mongodb,mongoose,Angularjs,Node.js,Mongodb,Mongoose,我重写了部分代码以使其更易于理解,因此请耐心阅读代码,我只编写导致问题的部分 我有一个mean.js应用程序,后端使用express和mongodb进行排序,我的所有资源端点都可以独立工作,但现在我正在查看具有复杂模式的对象,所以假设objA为objB保留ObjectId值 每当我试图从ObjA视图中按Id检索ObjB时,我都会调用$resource工厂获取getObjectBbyID,但我在当前的$scope中找不到一个值,可以用来存储在ObjA html视图中ng bind刚刚呈现的值 猫鼬

我重写了部分代码以使其更易于理解,因此请耐心阅读代码,我只编写导致问题的部分

我有一个mean.js应用程序,后端使用express和mongodb进行排序,我的所有资源端点都可以独立工作,但现在我正在查看具有复杂模式的对象,所以假设objA为objB保留ObjectId值

每当我试图从ObjA视图中按Id检索ObjB时,我都会调用$resource工厂获取getObjectBbyID,但我在当前的$scope中找不到一个值,可以用来存储在ObjA html视图中ng bind刚刚呈现的值

猫鼬模型

var objASchema = new Schema({
name:{
type: string
},
myobjB:{
type: Schema.ObjectId,
ref: 'ObjectB'
}
)};
mongoose.model('ObjectA', objASchema);
在我的角度前端中有一个$resource工厂,它通过Id获取$resource

angular.module('objbmodule').factory('ObjectBs', ['$resource',
    function($resource){
            return $resource('api/objbs/:objbId',{
                objbId: '@_id'
            }, {
            update:{
                method: 'PUT'
            }
        });
}]);
最后,在我的视图中,我试图在ObjectA findOne()的视图中通过Id检索objectB

现在的问题在于,在这一个视图中,我需要调用2个factory GET方法,第一个使用从我的应用程序路由角度来看原始$routeParam中提供的ID,第二个使用检索第一个ObjA时呈现的objbId值

<div ng-controller="ObjAController" ng-init"findOne()">
<span ng-bind="obja.name">{{obja.name}}</span>
<span ng-bind="obja.objbId">{{obja.objbId}}
<span ng-init="findObjB(obja.objbId)" ng-bind="objb.name">
</div>

{{obja.name}
{{obja.objbId}}

我找不到一个可能的ng指令可以使用此视图中刚刚呈现的Id值调用我的控制器方法,因为它只存在于呈现的html中,

您可以使用$q使findOne函数返回承诺,如下所示:

function findOne() {
    var config = {method: "get", url: prefix + "get", params: {id: id}};
    var deferred = $q.defer();
            deferred.resolve(ObjectAs.get({objaId: $routeParams.objaId}));
    return deferred.promise;
};
然后,您可以使用ng init调用一个getOne函数,该函数使用该承诺来执行您需要执行的下一个函数:

function getOne() {
    findOne()
        .then(function(response) {
            secondaryFunction1();
            secondaryFunction2();
        });
};

这很容易解决,但从mongoose的角度来看,从数据库中检索正确的对象,然后从angular绑定到前端的正确值

在我的mongoose服务器控制器中

var mongoose = require('mongoose'),
ObjectA = mongoose.model(ObjectA);

exports.objectAById = function(req, res, next, id){
//here i WAS populating('_id', 'objb') instead of what I have now which returns the whole objb Object wrapped inside the ObjectA JSON
ObjectA.findById(id).populate('objb')
.populate('name)
.exec(function(err, obja){
//error handling
在我的html中,我现在有

<span ng-bind="obja.objb.name"></span>


这主要是关于我的后端findone方法,需要调整。感谢您的贡献

我不确定这里的问题是否完全清楚。如果“Id值”的意思是
obja.objId
,那就是
$scope.obja.objbId
<代码>$scope在HTML中是隐式的,但这些值仍然肯定存在于JS中,而不仅仅存在于呈现的HTML中。另外,严格来说,这不是对
ng init
的适当使用。对象a为对象b保存一个id值,我正在尝试使用该值或在前端角度控制器中的某个位置保存该值,以便与对象b工厂一起使用,使用get工厂按id检索对象b。我使用nginit作为唯一的方法,我确信它将调用控制器中负责获取对象B文档的第二个函数,而无需任何用户输入。
<span ng-bind="obja.objb.name"></span>