«X не определен» при вызове функции JavaScript

0

У меня такой код:

  <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>

В app.js:

app.controller('customersController', ['$scope', '$http', function($scope,$http) {
          $http.get("http://18ff2f50.tunnel.mobi/yii2-basic/tests/Customers_JSON.json")
          .success(function (response) 
          {
            console.log("debug",response);
           $scope.orders = response;
          });

window.viewOrderDetails = function viewOrderDetails(detail) {
            var newWin = open('orderdetails.html','windowName','height=300,width=300');
            newWin.document.write('html to write...');
            newWin.document.write(detail);
        }

Я хочу x.detail как входной параметр для window.viewOrderDetails.

Но когда я нажимаю кнопку "Заказать деталь", он говорит, что "х не определен". Я хочу знать, где проблема. Благодарю.

  • 1
    Можете ли вы показать, что код для «заказов»?
  • 0
    зачем вам нужно onclick в середине углового приложения?
Показать ещё 3 комментария
Теги:
ionic-framework

3 ответа

0
Лучший ответ

Немного сложно сказать, но я предполагаю, что проблема здесь в том, что x не анализируется, потому что onclick - это просто выражение ванильного JavaScript, а не угловое выражение. Какая разница?

Что-то вроде того, что у вас есть сейчас, - это чистый javascript, в то время как угловой имеет свой собственный язык (это очень, очень близко к javascript), он использует в нем директивные выражения. X означает что-то угловое, но не регулярное javascript. Итак, как это исправить? Двумя способами.

Во-первых, вы можете изменить свой элемент button чтобы добавить ng-click. Вот так.

    <button ng-click="viewOrderDetails(x.detail)">Order detail</button>

Затем добавьте метод к вашему контроллеру для следующего.

    $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);
    }

Итак, теперь, поскольку угловой видит, что у него есть директива ng-click, он будет разбираться в синтаксическом анализе x как одного из текущих объектов в массиве, который вы выполняете.

Как говорили другие, вы также можете использовать это.

<button onclick="window.viewOrderDetails({{x.detail}})">Order detail</button>

Что совершенно верно, но я думаю, что если вы собираетесь создавать приложение в угловом, вы должны, вероятно, добавить что-то вроде viewOrderDetails В контроллер и сделать его частью углового. Это просто лучшая организация.

Но способ, которым это работает, состоит в том, что {{ }} говорит угловым, чтобы интерполировать и разбирать все, что в них. Таким образом, хотя угловой не оценивает все выражение javascript при щелчке, теперь он знает, что нужно пойти дальше и заменить x в {{}} на правильный объект, потому что он попытается разобрать все, что он видит в этих скобках.

  • 0
    Спасибо @OceansOnPluto, когда я попробовал первый способ, окно не появилось; когда я попробовал второй способ, окно всплыло, но содержимое «html to write ... {{x.detail}}», похоже, значение x.detail введено неправильно.
  • 0
    Ах, ты знаешь что? Удалить цитаты. Так что это должно быть viewOrderDetails({{x.detail}}) . Я отредактирую ответ. Это должно работать.
Показать ещё 1 комментарий
1

Вы должны заключить x.details в фигурные скобки

<button onclick="window.viewOrderDetails('{{x.detail}}')">Order detail</button>
  • 0
    В чем разница между вашим ответом и первым ответом?
  • 0
    Спасибо, теперь открывается окно, но содержимое "html to write ... {{x.detail}}", кажется, значение x.detail введено неправильно?
1

Попробуйте изменить обработчик кликов следующим образом:

 <button onclick="window.viewOrderDetails('{{ x.detail }}')">Order detail</button>
  • 0
    Спасибо, теперь открывается окно, но содержимое "html to write ... {{x.detail}}", кажется, значение x.detail введено неправильно?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню