Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 20.02.2015, 14:42
Новичок на форуме
Отправить личное сообщение для uuushka Посмотреть профиль Найти все сообщения от uuushka
 
Регистрация: 12.11.2014
Сообщений: 9

Как открыть новое окно и передеать данные в другой контроллер?
Всем привет!

У меня есть таблица с кучей столбцов. По двойному клику у меня должно открыться другое окно с формой, которая частично заполнена данных из строки, по которой кликнули. Как мне передать данные?

<div ng-controller="myController" class="form">
  <div class="col-sm-12">
    <div ng-grid="myTable" class="gridStyle"></div>
  </div>
</div>


'use strict'

angular.module('app.controllers', ['ngGrid'])
.controller('myController', [
    '$scope'
    '$http'
    '$window'
    ($scope, $http ,$window) ->

      $scope.data = []
      $scope.selectedRow = []
      $http.get("http://localhost:4444/data.json")
      .success(
        (data) ->
          $scope.data = data
      )

      $scope.myTable= {
        data: 'data'
        selectedItem: $scope.selectedRow
        rowTemplate: '<div ng-dblclick="showForm()" ng-style="{\'cursor\': row.cursor, \'z-index\': col.zIndex() }" ng-repeat="col in renderedColumns" ng-class="col.colIndex()" class="ngCell {{col.cellClass}}" ng-cell></div>',
        columnDefs: [
          {field: "id", displayName: "Номер"}
          {field: "date_doc", displayName: "Дата создания"}
          {field: "frm.name", displayName: "Фирма"}
          {field: "bnk.name", displayName: "Банк"}
          {field: "npp", displayName: "ПП"}
          {field: "comment", displayName: "comment"}
          
        ]

      }
      
      $scope.showForm = () ->
        $window.open('http://localhost:4444/#/myForm')



  ])
Ответить с цитированием
  #2 (permalink)  
Старый 20.02.2015, 14:46
Аватар для ksa
ksa ksa на форуме
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,217

Сообщение от uuushka
По двойному клику у меня должно открыться другое окно с формой
Прям новое окно? Тогда в него данные можно передать в самом УРЛ...

P.S.
Когда же "вы" научитесь делать тестовые примеры...
Ответить с цитированием
  #3 (permalink)  
Старый 20.02.2015, 15:21
Новичок на форуме
Отправить личное сообщение для uuushka Посмотреть профиль Найти все сообщения от uuushka
 
Регистрация: 12.11.2014
Сообщений: 9

Сообщение от ksa Посмотреть сообщение
Прям новое окно? Тогда в него данные можно передать в самом УРЛ...

P.S.
Когда же "вы" научитесь делать тестовые примеры...
Извиняюсь, исправляюсь. Вот прмер http://jsfiddle.net/vpee6rsd/6/

А как тогда принимать? и в каком формате правильно передавать? Можно как-нибудь через JSON?
Ответить с цитированием
  #4 (permalink)  
Старый 20.02.2015, 15:26
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Если домен тот же, то через объектную модель window можешь спокойно передать.

window.data = {'любые': 'данные'};
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #5 (permalink)  
Старый 20.02.2015, 16:24
Аватар для ksa
ksa ksa на форуме
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,217

Сообщение от uuushka
А как тогда принимать? и в каком формате правильно передавать?
Я с твоим вариантом таблицы не работал... Но если ты знаешь как там получить данные, можно воспользоваться простым вариантом - параметрами

<!DOCTYPE html>
<html ng-app>
<head>
<script src="http://code.angularjs.org/1.1.4/angular.min.js"></script>
<!--
<script src='http://code.jquery.com/jquery-latest.js'></script>
<link rel='stylesheet type=text/css href=tmp.css' />
-->
<style type='text/css'>
</style>
<script type='text/javascript'>
function ctrl($scope){
	$scope.data=[
		{id: 1, name: 'Иван'},
		{id: 2, name: 'Семен'},
		{id: 3, name: 'Игорь'},
	];
	$scope.send=function(Id){
		alert('Посылаем ИД='+Id);
	};
};
</script>
</head>
<body ng-controller='ctrl'> 
<ul>
	<li ng-repeat='o in data' ng-click='send(o.id);'>{{o.name}}</li>
</ul>
</body>
</html>

Зная параметры - формируешь УРЛ и открываешь окно.

По тому УРЛ нужно настроить распознавание

Как в учебном примере...

var phonecatApp = angular.module('phonecatApp', [
  'ngRoute',
  'phonecatControllers',
  'phonecatFilters'
]);

phonecatApp.config(['$routeProvider',
  function($routeProvider) {
    $routeProvider.
      when('/phones', {
        templateUrl: 'partials/phone-list.html',
        controller: 'PhoneListCtrl'
      }).
      when('/phones/:phoneId', {
        templateUrl: 'partials/phone-detail.html',
        controller: 'PhoneDetailCtrl'
      }).
      otherwise({
        redirectTo: '/phones'
      });
  }]);

Там передают phoneId
Потом "принимающий" контроллер увидит те параметры

phonecatControllers.controller('PhoneDetailCtrl', ['$scope', '$routeParams', '$http',
  function($scope, $routeParams, $http) {
    $http.get('phones/' + $routeParams.phoneId + '.json').success(function(data) {
      $scope.phone = data;
      $scope.mainImageUrl = data.images[0];
    });

    $scope.setImage = function(imageUrl) {
      $scope.mainImageUrl = imageUrl;
    }
  }]);

В $routeParams.phoneId...

Вот нечто такое...
Ответить с цитированием
  #6 (permalink)  
Старый 20.02.2015, 18:14
Аватар для MetaDriver
Аспирант
Отправить личное сообщение для MetaDriver Посмотреть профиль Найти все сообщения от MetaDriver
 
Регистрация: 24.04.2014
Сообщений: 66

Сообщение от uuushka Посмотреть сообщение
Всем привет!
У меня есть таблица с кучей столбцов. По двойному клику у меня должно открыться другое окно с формой, которая .............
А отдельное браузерное окно - это принципиально? Вроде как основной SPA-принцип (однократная загрузка скриптов/стилей) игнорится напрочь. Есть же другие гораздо более кошерные-одностраничные варианты (боковая панель, модальное окно и тп).
--
Вот, кстати, пример как у меня строки из грида (такого же как у тебя) на боковую отображаются. Я там сделал одну автоформу на все таблицы. Форма берёт на вход два объекта (1) отображаемую строку таблицы (которая $scope.selectedRow) и (2) объект-описатетель полей columnDefs (тот-же самый который в гриде используется), и по ним строит своё отображение.
Одна форма-viewer обслуживает пятьдесят таблиц (таблицы выбираются в левой выдвижной панели, покликай там), - вот это по нашему...
Сейчас собираюсь аналогичный подход организовать для автоформы редактирования. В той же самой боковой панели.
--
В любом случае,
Сообщение от uuushka Посмотреть сообщение
Прям новое окно? Тогда в него данные можно передать в самом УРЛ...
Сложно/ненужно.

Сообщение от danik.js Посмотреть сообщение
Если домен тот же, то через объектную модель window можешь спокойно передать.
window.data = {'любые': 'данные'};
Гораздо лучше. Простота - залог здоровья.

Последний раз редактировалось MetaDriver, 21.02.2015 в 00:29.
Ответить с цитированием
  #7 (permalink)  
Старый 24.02.2015, 00:37
Новичок на форуме
Отправить личное сообщение для uuushka Посмотреть профиль Найти все сообщения от uuushka
 
Регистрация: 12.11.2014
Сообщений: 9

К сожалению, новое окно принципиально ((
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
модальное окно да/нет как confirm vladislav.blinov Javascript под браузер 7 04.03.2014 10:02
Как вы относитесь к наркоманам? Maxmaxmaximus7 Оффтопик 7 05.02.2014 13:29
Как закрыть динамичное окно вместе\после родительского? Vilmos Элементы интерфейса 1 16.07.2009 20:54
Новое окно с рисунком Vilmos Элементы интерфейса 2 24.06.2009 23:59
Как узнать свернуто окно браузера или нет. bar-boss Events/DOM/Window 3 25.09.2008 16:09