2015-03-12 3 views
1

Я использую (удивительный) Restangular, и я сталкиваюсь с чем-то, что заставляет меня использовать scope.$parent (не удивительно), и я не хочу этого использовать. Кажется, хотя мой контроллер является родительской областью для области моей директивы, привязка выделенной области = оценивается до того, как мой родительский контроллер будет выполнен.Угловая директива изолировать область до родительского связывания undefined

Со следующим HTML:

<div ng-controller="myController"> 
    <div x-my-directive x-some-value="parentValue"></div> 
</div> 

И следующей директивой:

myApp.directive("myDirective", function() { 
    return { 
     restrict: 'A', 
     link: function (scope, elem) { 
      console.log(scope.someValue); // Logs 'undefined' :(
     }, 
     scope: { 
      someValue: "=" 
     } 
    } 
}); 

И следующий контроллер:

myApp.controller("myController", function($scope, allMyValues) { 
    allMyValues.getList().then(function(parentValue){ 
     $scope.parentValue = parentValue; 
    }); 
} 

Как показано в моих директивах link функции, оценивая свойство scope, которое должно было быть связано с областью моего родителя Операция возвращается undefined. Однако, когда я изменить мои директивы link функцию на следующее:

myApp.directive("myDirective", function() { 
     return { 
      restrict: 'A', 
      link: function (scope, elem) { 
       setTimeout(function() { 
        console.log(scope.someValue); // Logs '{1: number_1, 2: number_2}' 
       }, 2000); 
      }, 
      scope: { 
       someValue: "=" 
      } 
     } 
    }); 

Как я идти о решении этого ??

Благодаря

+0

, кажется, работает хорошо для меня см. здесь http://jsbin.com/komikitado/1/edit, как вы устанавливаете значения в $ scope.parentValue? – sylwester

+0

@sylwester Извините, я просто изменил вопрос: я использую Restangular в своем контроллере (глупо, чтобы не добавлять это в первую очередь, я знаю) – ZvL

ответ

1

, что должно помогает:

myApp.controller("myController", function($scope, allMyValues) { 
//add this line 
$scope.parentValue={}; 

    allMyValues.getList().then(function(parentValue){ 
     $scope.parentValue = parentValue; 
    }); 
} 

$ scope.parentValue не существует, пока ваш запрос не будет решена, так что добавьте строку, как показано ниже, чтобы ваш код образца демо http://jsbin.com/komikitado/1/edit

+0

Это разрешило мою проблему, оставалось только сделать это '$ scope. $ Apply()'. Благодаря! – ZvL

1

Похоже, вы ждете обещание решить, прежде чем присваивать значение для объема.

Есть несколько способов справиться с этим.

Один из способов - попытаться переместить вызов Restangular на функцию разрешения для представления, которое содержит контроллер. Затем вы получаете доступ к разрешенным данным непосредственно в виде инъекций в контроллерах.

Другим способом может быть просто присвоение обещания непосредственно области действия, а затем в функции связывания ждать разрешения.

scope.someValue.then(function(value) { console.log(value); }); 
+0

Несмотря на то, что он работает сейчас, ваше решение кажется более профессиональным. Я посмотрю, спасибо! – ZvL

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