2015-12-18 2 views
0

У меня есть объект лица, определяемый (загружается из внутреннего интерфейса), который выглядит следующим образом:Объекта не получили правильно угловых директивы

{ 
    "PersonId":"19894711-2eb9-4edf-92c6-85de2b33d1bb", 
    "Firstname":"Jacky", 
    "Lastname":"Chan", 
    "DateOfBirth":"1963-09-18T00:00:00", 
    "CreateDate":"2015-12-11T09:15:49.403", 
    "ModifyDate":"2015-12-11T09:15:49.403" 
} 

Это отображается правильно, используя этот HTML код:

<table> 
    <tr> 
     <td>Firstname</td> 
     <td> 
      <input type="text" ng-model="person.Firstname" class="form-control"/> 
     </td> 
    </tr> 
    <tr> 
     <td>Lastname</td> 
     <td> 
      <input type="text" ng-model="person.Lastname" class="form-control"/> 
     </td> 
    </tr> 
</table> 

Но если я передаю тот же самый объект в директиву:

<address-displayer-directive person="person"></address-displayer-directive> 

Это не работает.

Это код директивы:

myApp.directive("addressDisplayerDirective", [ 
    "addressService", 
    function (
     addressService) { 
     return { 
      scope: { 
       person: "=" 
      }, 
      restrict: "E", 
      templateUrl: "/Templates/Directives/addressDisplayerDirective.html", 
      controller: [ 
       "$scope", 
       function ($scope) { 
        console.log($scope.person); 

        $scope.addresses = addressService.GetForPerson($scope.person.Id); 
       }], 
      link: function ($scope, $elem, $attrs) { 
       console.log($attrs.person); 
      } 
     }; 
    }]); 

То console.log в блоке ссылок, отображает "person" (в виде строки, не является объектом).

console.log на блоке контроллера отображает undefined.

Я пробовал имитировать его с помощью Plunk, но там он работает.

Любые идеи?

+1

Является ли это просто опечатка, что у вас есть 'человек = "человек"' в вашем * закрывающей * HTML тег? Если это так, это определенно неправильно –

+0

Да, скопируйте ошибку папок, пытаясь настроить мой вопрос. Это не так, как на самом деле ... – Spikee

ответ

2

Вы делаете журнал, когда только изначально (таким образом, получаете неопределенные значения). Вам нужно посмотреть, когда объект заселен, а затем выполнить служебный вызов.

controller: [ 
      "$scope", 
      function ($scope) { 
       console.log($scope.person); 
       $scope.$watch(function(){ 
        return $scope.person; 
       }, function(){ 
        if($scope.person && $scope.person.PersonId){ 
         $scope.addresses = addressService.GetForPerson($scope.person.Id); 
        } 
       });      
      }], 
+0

Это работает! Объект, передаваемый (человек), является объектом _promise_, асинхронно загруженным, поэтому имеет смысл! – Spikee

0

Возможно, я ошибаюсь, но при этом вы передаете строку «человек» только своей директиве.

Попробуйте это:

<address-displayer-directive person="{{person}}"></address-displayer-directive> 
+1

Это было бы необходимо, если бы 'person: '@'' было бы определено в объявлении области действия директивы. (для оценки выражения) –

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