2015-05-19 4 views
2

Я передал объект от контроллера к директиве, но когда я читаю объект в директиве, я не могу, кажется, что в директивном объекте читается как строка. Код ниже, i убывать, чтобы прочитать Город и Состояние от объекта.Angularjs: как читать объект в директиве

Html File 

<div ng-controller="WeatherController">  
<div weather ng-object="{{Object}}"></div> 
</div> 

Controller 
.controller('WeatherController', ['$scope', function ($scope) { 
    $scope.webpartData.OverviewData.Person.Address.City; 
      $scope.Object = { 
       City: '', 
       State: '' 
      }; 
      $scope.Object.City = 'TestCity'; 
      $scope.Object.State = 'TestState';   
     }); 
    }) 
}]) 


Directive 


angular.module('WeatherModule', []) 
.directive('Weather', ["$timeout", function($timeout) { 
    return { 
     restrict: 'EA', 
     template: '<div id="weather"></div>', 
     scope: { 
      ngObject: '@ngObject' 
     }, 
     link: function(scope, element, attrs) { 
      scope.$watch('ngObject', function(value) { 
       scope.ngObject = value; 
      }); 
      $timeout(function() { 
       console.log('Location' + scope.Object.City + ',' + scope.Object.State); 
      }, 100); 
     } 
    }; 
}]) 
+0

В данный момент я вижу объект diplaying как {» Город ":" TestCity "," State ":" TestState "} Это недопустимо для чтения scope.Object.City и scope.Object.State –

ответ

1

Вы должны использовать «=» вместо «@». И ng-object = "Object" вместо ng-object = "{{Object}}".

+0

спасибо, это сработало для меня :) –

6

Существуют различия между @, = and & при ссылке на элементы области действия директивы.

1. "@" (Text binding/one-way binding) 
2. "=" (Direct model binding/two-way binding) 
3. "&" (Behaviour binding/Method binding) 

@ означает, что изменения из сферы контроллера будут отражены в директиве рамки, но если вы измените значение в директиве сферы, сфера управления переменной не будут затронуты.

@ всегда ожидает, что отображаемый атрибут будет выражением. Это очень важно; потому что для работы префикса «@» нам нужно обернуть значение атрибута внутри {{}}.

= является birectional, так что если вы измените переменные в директиве области видимости, переменная в области видимости контроллера затронут, а

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

в вашем случае, возможно, придется использовать = вместо @

Посмотрите на следующую скрипке (Это не мое , Но есть хорошие и точки иллюстрации) http://jsfiddle.net/maxisam/QrCXh/

Некоторые вопросы, относящиеся также:

+0

это сработало, спасибо :). –

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