我有一个Angular 1.x - Node应用程序。我需要使用谷歌浏览器在新标签中从第一个启动另一个类似的应用程序。
流程如下:
- 用户从列出许多可用应用程序的页面开始
- 用户单击“运行”按钮,此处定义为(在表格行内):
<td><button type="button" class="btn btn-primary" ng-click="vm.onSubmit({'operation': 'run', 'slug': application.slug, 'port': application.port});">Run</button></td>
- onSubmit点击处理程序,从视图的Angular控制器,通过http POST请求将JSON数据发送到相应的节点控制器。
- 节点控制器启动服务器的应用程序如下:
console.log("Application run request on the server side, port: " + req.body.port + " slug: " + req.body.slug);
var fork = require('child_process').fork;
var child = fork('../../' + req.body.slug);
res.status(200).json({ "port": req.body.port });
- Angular控制器中的http POST请求的.success方法选择应用程序打开新标签端口
return $http.post('/api/applications', data)
.success(function (result) {
console.log("port is " + result.port);
// What should I do here (and elsewhere)?
})
// catch the error message
.error(function (error) {
vm.error = error;
});
和......在这里,我需要你的帮助! 到目前为止,所有流程都工作正常,新的应用程序实例在Node中启动(显示上面的控制台消息,如果我手动打开一个新的选项卡并生成http://localhost:port_nb,我得到的是我需要从第一个应用程序自动显示触发)。 我的问题是:在Angular空间(视图控制器)中的位置以及我应该如何实现接近
的东西$window.open('http://localhost:port_nb', '_blank');
知道这可以直接点击按钮,这不是我的情况。 一个正式的答案可能是“创建一个点击事件”,但这并没有出现在我的脑海中。 谢谢!
答案 0 :(得分:1)
您应该在Angular的控制器中实现onSubmit
方法,如下所示
vm.onSumbit = function(data) {
return $http.post('/api/applications', data)
.success(function (result) {
console.log("port is " + result.port);
$window.open('http://localhost:' + result.port, '_blank');
})
// catch the error message
.error(function (error) {
vm.error = error;
});
}
还要确保引用控制器Controller as vm
。
最好将$http
个请求存储在工厂或服务中。