2013-09-24 5 views
0

Я не могу понять, почему я не могу получить доступ к свойствам $ scope из директивы, в документации говорится, что директивы не создают новые области видимости, поэтому почему я не могу Свойства $ scope?

в app.js

'use strict'; 

var climbingApp = angular.module('climbingApp', []); 

climbingApp.controller('ctrl', function($scope) { 

    $scope.initLocation = { 
     lat: -54.798112, 
     lng: -68.303375 
    }; 

на Google-map.js

'use strict'; 

climbingApp.directive('gmap', function() { 
     return { 
      restrict: 'E', 
      replace: true, 
      template: '<div id="map-canvas"></div>', 
      link: function(scope, iElement, attrs) { 
       console.log(scope.initLocation); 
      }, 
     } 

    }) 

в index.html

<html ng-app="climbingApp"> 
    <body> 
    <gmap></gmap> 

    </body> 
    </html> 

<script src="//code.angularjs.org/1.2.0-rc.2/angular.min.js"></script> 

<script src="app/app.js"></script> 
<script src="app/dependencies/google-maps.js"></script> 

console.log всегда возвращает undefined.

ответ

1

Вам необходимо связать контроллер с видом (если вы используете ngRoute) или элемент, используя ng-controller. Что-то вроде этого:

<body ng-controller="ctrl">...</body> 
2

Вам нужно придать объем в контроллер

climbingApp.controller('ctrl', function($scope) { 
0

Инжектируйте $ объем в контроллере так:

var climbingApp = angular.module('climbingApp', ['ngRoute']); 


    climbingApp.controller('ctrl', function($scope) { 

     $scope.initLocation = { 
      lat: -54.798112, 
      lng: -68.303375 
     }; 

     $scope.markers = [ 
      { 
       'title' : 'prueba', 
       'position' : [-54.798112, -68.303375] 
      }, 
      { 
       'title': 'prueba', 
       'position': [-54.798212, -68.303375] 
      } 
     ]; 
    }); 


    'use strict'; 

    climbingApp.directive('gmap', function() { 
      return { 
       restrict: 'E', 
       replace: true, 
       template: '<div id="map-canvas"></div>', 
       link: function(scope, iElement, attrs) { 
        console.log(scope.initLocation); 
       }, 
      } 

     }) 

работает plunkr здесь: http://plnkr.co/edit/fiK5viToLOVGobnAKZtB?p=preview

появляется лог.

$ scope или $ location должны быть переданы функцией вашего контроллера в качестве параметра.

+0

Я не знаю, почему это не работает для меня ... –

+0

Потому что, если вы видите ваш контроллер в функции обратного вызова у вас нет Params. Но в вашем контроллере вы используете $ scope. И в AngularJS, если вы хотите использовать $ scope, вы должны передать его в параметре функции контроллера. Ты понимаешь это ? –

+0

Да, конечно, я ввел $ scope в контроллер 'ctrl', и он не сработал –

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