2014-01-18 2 views
0

Невозможно вызвать метод «толчок» неопределенногоAngularJS толчок неопределенные

я получаю эту ошибку, когда мое AngularJS работает следующим образом:

$scope.ok = function() { 
    $modalInstance.close(); 
    $scope.key.push({ title: '', gps:'', desc:''}); 
}; 

я объявил мой $scope.key = []; сразу после моего .controller, как Мне нужно иметь возможность использовать $scope.key в других частях приложения. Может ли кто-нибудь указать, где я должен объявить это?

$scope.ok - это моя кнопка «Сохранить», которая извлекает данные из моих полей ввода и $scope.plotmarkers - это то, что я использую, чтобы вытащить данные с входов, которые были нажаты.

app.controller('MenuSideController', ['$scope','$modal','$log', function($scope, $modal, $log) { 

    $scope.key = []; 

    $scope.createmarker = function() { 
     var modalInstance = $modal.open({ 
      templateUrl: 'template/modal-add-marker.html', 
      controller: ModalInstanceCtrl, 
      resolve: {} 
     }); 
     modalInstance.result.then(function (selectedItem) { 
     }, function() { 
      $log.info('Modal dismissed at: ' + new Date()); 
     }); 
    }; 
    var ModalInstanceCtrl = function ($scope, $modalInstance) { 
     $scope.ok = function() { 
      $modalInstance.close(); 
      $scope.key.push({ title: '', gps:'', desc:''}); 
     }; 

     $scope.cancel = function() { 
      $modalInstance.dismiss('cancel'); 
     }; 
    }; 


    $scope.plotmarkers = function() { 
     console.log($scope.key); 
    }; 
}]); 
+1

$ scope (из параметра функции) теней $ scope от внешней функции –

ответ

0

Не забудьте переместить область в $modal.open! Если вы этого не сделаете, он по умолчанию будет иметь корневую область, которая не является дочерней областью контроллера, поэтому key не определен на ней или ее родителях. Вы можете использовать { scope: $scope.$new(), ... } в качестве параметра $model.open, чтобы передать ему ребенка в области управления. См. the docs. Удачи!

-1

Я думаю, что вы используете $ modal немного ненадлежащим образом.

Итак, у вас есть два контроллера: один для логики приложения и один для самого модального окна. В соответствии с лучшей практикой вам не следует напрямую взаимодействовать между разными контроллерами (случай с директивой parent-child - исключение, но, честно говоря, это не прямое взаимодействие - скорее, ваша линкер-функция использовала контроллер из родительской директивы). Вместо взаимодействия между контроллером в целом мы должны использовать сервисы. Это просто дополнительная заметка.

Что связано с вашим вопросом - у вас есть две вещи здесь, чтобы иметь в виду:

  • , если вы хотите, чтобы передать информацию от контроллера к модальное окно, вы должны использовать решимость имущество, которое фактически определяет множественный функции, которые вызываются для получения данных, а затем вводятся в модальный контроллер окон в качестве параметра функции. Таким образом, вы можете передать некоторые данные с основного контроллера.
  • Если вам нужно передать результат назад, вы должны использовать свойство результата модального экземпляра, который является обещанием (используя ваш $ modalInstance.result.then (function (result) {...});) Чтобы передать это объект из модального, вы можете закрыть его с результатом в качестве параметра: $ modalInstance.close (result);

Надеюсь, это поможет. Для получения дополнительной информации вы можете посмотреть документацию для модального мода: Angular Bootstrap

Смежные вопросы