2016-04-11 2 views
1

Я знаю два способа объявить и определить контроллеры в angularjs:AngularJS: как ввести объект в контроллер?

первый путь:

myApp.controller('myController', ['$scope', '$uibModal', myController]); 

function myController($scope, $uibModal, myObject){ 
    $scope.params = {}; 
    $scope.open = function(){ 
     $uibModal.open({ 
      templateUrl:'my_dialig.html', 
      controller:myDialogController, 
      resolve:{ 
       myObject:function(){ 
       return $scope.params; 
       } 
      } 
     }); 
    } 
} 

второй путь:

myApp.controller('myController', function($scope, $uibModal){ 
    $scope.params = {}; 
    $scope.open = function(){ 
    $uibModal.open({ 
     templateUrl:'my_dialog.html', 
     controller:myDialogController, 
     resolve:{ 
      myObject:function(){ 
       return $scope.params; 
      } 
     } 
    }); 
    } 
}); 

Где я использую myObject:

... 

myApp.controller('myDialogController', function($uibModalInstance, myObject){ 
    console.log(myObject); 
} 
... 

это код UI Bootstrap Modal Dialog, а объект objec t, возвращаемое с resolve - это данные, которые необходимо передать в область диалога.

Но проблема возникает:

1-й способ:

не может быть разрешено AngularJS, потому что он не может найти определение MyObject в myDialogController.

2-й способ:

значение печатается в журнале: 'не определено'.

Является ли способ объявить и определить контроллер неправильно? (Другие части кода контроллера работают нормально), или это так, как myObject неправильно передан контроллеру (код для использования контроллера - от AngularJS Пример кода пользовательского интерфейса Bootstrap: «https://angular-ui.github.io/bootstrap/»).

Ошибка, которую я делаю, может показаться глупым, но для меня это важно, спасибо, что выложили ее!

+0

Где вы имеете 'resolve'? – Joy

+0

@Joy, в https://angular-ui.github.io/bootstrap/, Modal part, он говорит: resolve (Тип: Object) - члены, которые будут разрешены и переданы контроллеру в качестве локальных; это эквивалентно свойству разрешения в маршрутизаторе. – Al2O3

+0

Я бы предложил сделать его живым на JSFiddle/Plunker/Pen – Joy

ответ

0

Что такое объект myObject. Угловой инжектор может только вводить объект в угловое (например, myController, определяемое приложением). Таким образом, вы должны повернуть свой объект myObject к угловому объекту, сервису или фабрике в порядке.

myApp.service("myObject", function() { 
    ... 
}) 

Если вы хотите, чтобы ввести некоторый объект самостоятельно, вы можете использовать $ контроллера, как это:

$controller("myController", {myObject: myObject}); 

здесь документация: $controller

+0

Я могу использовать фабрику или услугу, но я думаю, что дизайн не очень хорош, ведь данные, переданные в диалог, - это всего лишь выбранный идентификатор элемента. И код должен работать отлично, как пример кода «Модальный» в: https://angular-ui.github.io/bootstrap/ – Al2O3

+0

Ответ обновлен. UI Bootstrap вводит экземпляр через контроллер $. – xierui

0

выглядит, как вы просто хотите передать $ scope.params для диалогового контроллера. если это так, вам не нужно вводить myObject в myController.

myApp.controller('myController', function($uibModal){ 
    $scope.params = {}; 
    $scope.open = function(){ 
    $uibModal.open({ 
     templateUrl:'my_dialog.html', 
     controller:myDialogController, 
     resolve:{ 
      myObject:function(){ 
      return $scope.params; 
      } 
     } 
    }); 
    } 
}); 
+0

Я улучшил myedits, (использование myObject в myDialogController) – Al2O3

+0

Вы все еще получаете неопределенные данные при открытии диалога? – sdfacre

0

Вы должны создать service or constant, чтобы ввести в контроллер, константа, если ваш объект является постоянным (дух) и услугу, если она содержит данные, которые необходимы динамически (функции как значения).

так ...

myApp.service('myObject', function(){ 
    return { 
     function(){ 
      ... 
     }, 
     .... 
    } 
}) 

или

myApp.constant('myObject', { 
    'someKey': 'someValue', 
    ... 
}) 
+0

код должен работать, передавая данные через «разрешение», см. Код; https://angular-ui.github.io/bootstrap/ – Al2O3

+0

вы передаете функцию «myObject», а не объект, поэтому может быть что-то вроде: myObject: { getParams: function() {return $ scope.params} } – northsideknight

+0

Если я использую 'myObject()', он регистрирует 'myObject не является функцией' – Al2O3

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