&引用;x未定义“x”;当调用javascript函数时

&引用;x未定义“x”;当调用javascript函数时,javascript,angularjs,ionic-framework,Javascript,Angularjs,Ionic Framework,我有这样的代码: <ion-content> <ion-list> <ion-item > 订单号 餐桌 顾客姓名 顾客电话号码 配送地址 订单备注 下单时间 </ion-item> <ion-item ng-repeat="x in orders|orderBy:'order_id'"> {{ x.order_id + ', ' + x.table_id+', '+x.name+',

我有这样的代码:

  <ion-content>
    <ion-list>
      <ion-item > 订单号 餐桌 顾客姓名 顾客电话号码 配送地址 订单备注 下单时间 </ion-item>
      <ion-item ng-repeat="x in orders|orderBy:'order_id'">
        {{ x.order_id + ', ' + x.table_id+', '+x.name+', '+x.phone+', '+x.address+', '+x.remark+', '+changTimetoString(x.ctime)}}
        <button onclick="window.viewOrderDetails(x.detail)">Order detail</button>
      </ion-item>
    </ion-list>
  </ion-content>
我希望x.detail作为window.viewOrderDetails的输入参数

但当我点击“订单详细信息”按钮时,会显示“x未定义”。
我想知道问题出在哪里。谢谢。

尝试按如下方式更改您的单击处理程序:

 <button onclick="window.viewOrderDetails('{{ x.detail }}')">Order detail</button>
订单详细信息

您必须将x.details用花括号括起来

<button onclick="window.viewOrderDetails('{{x.detail}}')">Order detail</button>
订单详细信息

这有点难说,但我猜这里的问题是x没有被解析,因为
onclick
只是一个普通的javascript表达式,而不是角度表达式。有什么区别

像现在这样的东西是纯javascript,而angular有自己的语言(非常非常接近javascript),它在指令表达式中使用。X对Angular来说意味着一些东西,但对常规javascript来说不是。那么如何解决这个问题呢?在两个方面

首先,您可以更改
按钮
元素以添加ng单击。像这样

    <button ng-click="viewOrderDetails(x.detail)">Order detail</button>
现在,由于angular看到它有一个
ng click
指令,它就知道要将x解析为迭代数组中的当前对象之一

正如其他人所说,您也可以使用这个

<button onclick="window.viewOrderDetails({{x.detail}})">Order detail</button>
订单详细信息
这是完全正确的,但我认为如果你要在angular中构建一个应用程序,你可能应该在控制器中添加类似viewOrderDetails的内容,并使其成为angular的一部分。这只是更好的组织


但是它的工作方式是,
{{}
告诉angular插值和解析其中的任何内容。因此,尽管angular没有在单击时计算整个javascript表达式,但它现在知道继续并用正确的对象替换
{{}
中的x,因为它将尝试解析在这些大括号中看到的任何内容

你能显示代码是什么“订单”吗?为什么你需要一个角应用程序中间的<代码> OnCasks<代码>?你可以用<代码> NG点击< /代码>代替<代码> OnCuts/<代码>吗?另外,尽量不要使用window作为您的控制器名称,通常是window。在javascript中有些东西有特殊的含义。@lcycool,我用ng click替换了onclick,错误“x未定义”消失了,但window没有按预期出现。您好,@charlietfl,您的意思是我需要用ng click替换onclick吗?我试过了,但窗口没有出现。你的答案和第一个答案有什么区别?谢谢,现在窗口出现了,但内容是“html to write…{{x.detail}”,似乎x.detail的值输入不正确?谢谢,现在窗口出现了,但内容是“html to write…{x.detail}”,似乎x.detail的值输入不正确?谢谢@OceansOnPluto,当我尝试第一种方法时,窗口没有出现;当我尝试第二种方法时,窗口出现,但内容是“html编写…{{x.detail}}”,似乎x.detail的值输入不正确。啊,你知道吗?删除引号。所以它应该是
viewOrderDetails({{x.detail}})
。我将编辑答案。那应该行。谢谢@OceansOnPluto,第一种方法现在对我有效!
    $scope.viewOrderDetails = function viewOrderDetails(detail) {
        var newWin = open('orderdetails.html','windowName','height=300,width=300');
        newWin.document.write('html to write...');
        newWin.document.write(detail);
    }
<button onclick="window.viewOrderDetails({{x.detail}})">Order detail</button>