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