Javascript 从状态解析函数访问返回的数据
我正在使用AngularJS模块Javascript 从状态解析函数访问返回的数据,javascript,angularjs,chart.js,Javascript,Angularjs,Chart.js,我正在使用AngularJS模块ui路由器,并使用resolve属性获取项目的id 在一个单独的文件中,我有一个组件,patient,用于状态patients.patient,它具有返回id的功能。我需要从控制器访问返回的id,以便收集与所选项目相关的正确数据 如何访问控制器返回的resolve函数值 var app = angular.module('myApp', ['ui.router', 'chart.js']); app.config(['$stateProvider', funct
ui路由器
,并使用resolve
属性获取项目的id
在一个单独的文件中,我有一个组件,patient
,用于状态patients.patient
,它具有返回id
的功能。我需要从控制器访问返回的id
,以便收集与所选项目相关的正确数据
如何访问控制器返回的resolve
函数值
var app = angular.module('myApp', ['ui.router', 'chart.js']);
app.config(['$stateProvider', function($stateProvider) {
$stateProvider
.state('patents', {
url: '/patents',
component: 'patents',
resolve: {
patents: function(patentsService) {
return patentsService.fetchAllPatents();
},
graphs: function(patentsService) {
return patentsService.fetchGraphData();
}
}
})
.state('patents.patent', {
url: '/{patentId}',
component: 'patent',
resolve: {
patent: function(patents, $stateParams) {
return patents.find(function(patent){
return patent.id == $stateParams.patentId;
})
},
graph: function(graphs, $stateParams) {
return graphs.dataset.find(function(graph){
return graph.id == $stateParams.patentId; //NEED THIS VALUE
})
}
}
})
}]);
正如Vivz指出的,注入控制器应该可以工作,但您需要确保防止缩小问题:
angular.module('myApp').component('patent', {
bindings: {
patent: '=' ,
},
templateUrl: '../templates/patents/list/patent-item.htm',
controller: ['graph', function(graph) {
var vm = this;
//WHERE I NEED TO ACCESS THE RETURNED VALUE
}]
});
要访问解析的数据,只需将它们定义为控制器的绑定。就像你已经完成了
专利
。然后通过vm
变量(或此变量)访问它们
您可以将解析注入控制器函数,如controller:function(专利、图形)这正是我所想的,但它出现了错误
error:$injector:unpr Unknown Provider
您可以使用指令而不是组件,结构看起来是一样的,但是Idk其他开发人员建议您尝试使用组件实现什么,并且根据Angular的文档,您可以使用一个路由控制器,它将充当resolve和组件之间的粘合剂。它的工作是在作用域中注入所有“解析”和它们,以便模板可以访问它们。更多参考信息,我了解安全防范最小化问题,但仍然存在错误错误:$injector:unprUnknown Provider
shows:/非常感谢您的详细解释和示例,但是第一种方法返回undefined,第二种方法返回与上述相同的错误消息。我一直在读Vivz发布的内容。似乎正在取得进展,但正在返回错误请尝试在resolve函数中添加console.log()
,以检查它们是否实际返回任何值,或者是否调用了它们。问题似乎不是控制器本身。是的,我做到了。返回专利和图形解析的正确数据。到目前为止,您共享的代码中似乎没有任何错误,因此可能错误源于其他地方。你能分享你问题中的全部错误信息吗?@Nikolajdallarsen非常感谢你!!!像一个骑兵一样工作。再次感谢!
angular.module('myApp').component('patent', {
bindings: {
patent: '=' ,
},
templateUrl: '../templates/patents/list/patent-item.htm',
controller: ['graph', function(graph) {
var vm = this;
//WHERE I NEED TO ACCESS THE RETURNED VALUE
}]
});
angular.module('myApp').component('patent', {
bindings: {
patent: '<' ,
graph: '<'
},
templateUrl: '../templates/patents/list/patent-item.htm',
controller: function() {
var vm = this;
vm.$onChanges = function(changeObj){
if(changeObj.patent){
console.log('I am your patent', vm.patent);
}
if(changeObj.patent){
console.log('I am your graph', vm.graph);
}
}
}
});
resolve: {
patents: ['patentsService', function(patentsService) {
return patentsService.fetchAllPatents();
}],
graphs: ['patentsService', function(patentsService) {
return patentsService.fetchGraphData();
}]
}