【发布时间】:2016-06-08 00:38:36
【问题描述】:
我重写了部分代码以使其更易于理解,因此请耐心阅读代码,我只编写导致问题的部分。
我有一个 mean.js 应用程序,后端使用 express 和 mongodb 进行排序,我所有的资源端点都可以独立运行,但现在我正在查看具有复杂模式的对象,所以假设 objA 的值是 ObjectId对于objB
每当我尝试从 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);
在我的 Angular 前端有一个 $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
angular.module('objas').controller('ObjAController', ['$scope',$routeParams','ObjectBs' function($scope, $routeparams, ObjectBs){
$scope.findOne=function(){
$scope.obja= ObjectAs.get({
objaId: $routeParams.objaId
});
};
$scope.findObjB=function(someid){
if(!someid)
console.log("noid");
$scope.objb = ObjectBs.get({
objbId: someid
});
};
}
]);
现在问题出在这里,在这个视图中我需要调用 2 个工厂 GET 方法,第一个使用从我的应用程序路由的角度来看原始 $routeParam 中提供的 ID,第二个使用呈现的 objbId 值当检索到第一个 ObjA 时。
<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>
我找不到一个可能的 ng 指令,它可以使用刚刚在此视图中呈现的 Id 值来调用我的控制器方法,因为它只存在于呈现的 html 中,
【问题讨论】:
-
我不确定这里的问题是否完全清楚。如果您所说的“Id 值”是指
obja.objId,那么就是$scope.obja.objbId。$scope隐含在 HTML 中,但这些值仍然绝对存在于 JS 中,而不仅仅是在呈现的 HTML 中。此外,严格来说,这不是ng-init的适当用法。 -
对象 a 保存对象 b _id 值的值,我试图在前端角度控制器中使用或保存该值,以便将其与对象 B 工厂一起使用,以使用 Id 检索对象 B拿到工厂。我使用 ng-init 作为唯一方法,我确信会在我的控制器中调用负责获取对象 B 文档的第二个函数,而无需任何用户输入。
标签: angularjs node.js mongodb mongoose