2017-07-14 68 views
3

致电hosoas行动/链接在形式的行动我们正在使用hateoas调用后端我们的链接。我们HateoasWrapper看起来像这样(从浏览器控制台复制出来):通过邮件

{ 
    $actions: [ 
     { 
      $call: function() 
      action: "load" 
      href: "http://myApi" 
      method: "POST" 
      rel: "parent" 
     } 
    ], 
    $load: function(), 
    Links: [ 
     { 
      ActionValue: "load" 
      Href: "http://myApi" 
      Methid: "POST" 
      Reld: "parent" 
     } 
    ] 
} 

因此,我们可以直接拨打我们的联系是这样的:myObject.$load()(它调用从负载HREF)。这工作正常。

现在我尝试拨打form元素的action中的$load()。为此,我将通话的action并用submit这样火了:

<form action="ctrl.myObject.$load()" method="post" target="_blank"> 
    <input type="submit"> 
</form> 

这行不通。它会打开一个新的标签,但这个错误:Cannot post/ctrl.myObject.$load()

当我把硬编码到行动中的href,它的工作原理(用正确的数据新标签):

<form action="http://myApi" method="post" target="_blank"> 
    <input type="submit"> 
</form> 

是否可以调用hateoasactionform像我的解决方案?

+0

试着改变你的操作方法,以行动=“ctrl.myObject.Links [0] .Href” – Vivz

+0

这可以工作,但也有超过一个链接,我想打电话给它与actionValue名称$ [ActionValue],因为列表的顺序也是动态的(如果这是明确的)。 – MrBuggy

+0

如果有多个链接,您将如何知道哪个链接要使用哪个链接? – Vivz

回答

0

您在此处缺少插值。由于action不是标准的AngularJS指令/属性,AngularJS引擎无法理解传递的表达式。

尝试在{{ctrl.myObject.$load()}}等花括号中包装表达式ctrl.myObject.$load(),然后AngularJS会自动用函数的返回值替换它。

在以下代码片段中观察它的作用。打开检查面板,观察表单的action属性中的内容。

angular.module("myapp", []) 
 
    .controller("myCtrl", function($scope) { 
 
    $scope.myaction = function() { 
 
     return "abc"; 
 
    }; 
 
    });
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 

 
<div ng-app="myapp" ng-controller="myCtrl"> 
 
<form action="{{myaction()}}"> 
 
    Inspect this form's action in console 
 
</form> 
 
</div>

+0

我仍然得到这个错误:不能POST/ – MrBuggy

+0

@MrBuggy - 你能告诉我'$ load'函数的定义吗? – 31piy