2015-08-10 3 views
2

Я немного борюсь с бесконечным свитком в угловом. У меня есть один массив объектов, в котором хранятся все элементы. Этот объект является частью директивного контроллера.Угловые переменные манипуляции из разных директив

Теперь, когда я пытаюсь реализовать бесконечный прокрутки, я использую отдельную директиву для расчета смещений. Я хотел бы получить доступ к этой переменной указателя прокрутки из другой директивы, где определяется массив объектов.

Как я могу это сделать? Что было бы самым простым способом здесь? Я ищу неделю и не могу найти что-либо достаточно легкое для реализации моего решения. Спасибо

+0

Вы не отметили мой ответ, как принято. Есть ли что-то недостаточное, что я должен вам разъяснить? – m59

ответ

0

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

<div ng-app="myApp"> 
    <foo></foo> 
    <bar></bar> 
</div> 
angular.module('myApp', []) 
.directive('foo', function() { 
    return { 
    controller: function($scope) { 
     $scope.foo = 123; 
    } 
    }; 
}) 
.directive('bar', function() { 
    return { 
    require: '^foo', 
    controller: function($scope) { 
     console.log($scope.foo); 
    } 
    }; 
}) 
; 

Время для следующего примера не может быть то, что вы хотите. Они используют одну и ту же переменную, но изменения в $scope в контроллере первой директивы не будут применяться до тех пор, пока контроллер второй директивы уже не запустится. (live demo).

<div ng-app="myApp" ng-controller="MyCtrl"> 
    {{sharedValue}} 
    <foo shared-value="sharedValue"></foo> 
    <bar shared-value="sharedValue"></bar> 
</div> 
angular.module('myApp', []) 
.controller('MyCtrl', function($scope) { 
    $scope.sharedValue = 'abc'; 
}) 
.directive('foo', function() { 
    return { 
    scope: { 
     sharedValue: "=" 
    }, 
    controller: function($scope) { 
     console.log($scope.sharedValue); // abc 
     $scope.sharedValue = 123; 
    } 
    }; 
}) 
.directive('bar', function() { 
    return { 
    scope: { 
     sharedValue: '=' 
    }, 
    controller: function($scope) { 
     console.log($scope.sharedValue); // still abc, will update later 
    } 
    }; 
}) 
; 
+0

Благодарим за помощь. Нужно ли использовать $ scope для передачи переменной? Например, у меня нет $ scope в моем контроллере, и вместо этого я использую this.variable – user007

+0

@ user007 Да. В первом примере директивы используют один и тот же '$ scope'. Во втором примере они имеют собственные области, но обе области имеют доступ к одной и той же переменной. – m59

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