如何将变量传递给控制器​​的指令?

时间:2015-10-19 00:00:28

标签: javascript angularjs directive

HTML:

<div ng-repeat="item in productArr">
   {{ item.title }}
</div>
<div category-page-navigation current-page='currentPage' category-products-count='productsCount'></div>

JS:

.controller('categoryController', ['$scope', '$location', '$http', '$q', '$window', '$stateParams', function($scope, $location, $http, $q, $window, $stateParams) {

        $scope.currentPage = 1;
        $scope.productsCount = 0;               

        var GET = {
            getProductData: function() {
                var defer = $q.defer();

                $http.post('services/loadProduct.php', {
                    'id'    :1,
                }).then(function(response) {
                    defer.resolve(response);
                }, function(response) {             
                    defer.resolve([]);
                });         

                return defer.promise;               
            }
        };

        var getData = {
            getProduct: function() {
                var productData = GET.getProductData();

                $q.all([productData]).then(
                    function(response) {
                        $scope.productArr = response[0].data.products;
                        $scope.productsCount = response[0].data.products.length;
                    });         
            }
        };

        getData.getProduct(); 

    }])
    .directive('categoryPageNavigation', function($compile, $parse) {
        return {
            scope: {
                currentPage: '=currentPage',
                categoryProductsCount: '=categoryProductsCount'
            },
            link: function (scope, element, attrs) {
                debugger;
                // Here scope.categoryProductsCount = undefined
                // ...
                $scope.$watch(scope.currentPage, function(value) {
                    // ...
                });                             
            }
        };
    });

我尝试形成新的导航HTML,以便用ng-repeat从HTML中进行操作。 在指令中我需要currentPage(来自start = 1)和来自服务的ng-repeat(数组的长度)项目的总计数。我如何将变量传递给指令?首先,我需要从服务(ajax请求或其他)获取变量,然后将变量(一些ather数据)传递给指令。

1 个答案:

答案 0 :(得分:0)

如果我理解你的意思。下面是一个代码笔示例,介绍如何在控制器和指令之间共享数据。

理解以下代码的好读物:https://docs.angularjs.org/guide/providers

http://codepen.io/chocobowings/full/Xmzxmo/

var app = angular.module('app', []);
//-------------------------------------------------------//
app.factory('Shared', function() {
  return {
    sharedValue: {
      value: '',
    }
  };
});
//-------------------------------------------------------//
app.controller('ctrl', function($scope, Shared) {
  $scope.model = Shared.sharedValue;
});
//-------------------------------------------------------//
app.directive('directive', ['Shared',
  function(Shared) {
    return {
      restrict: 'E',
      link: function(scope) {
        scope.model = Shared.sharedValue;
      },
      template: '<div><input type="text" ng-model="model.value"/></div>'
    }
  }
]);
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="app">
  Ctrl:
  <div ng-controller="ctrl">
    <input type="text" ng-model="model.value" />
    <br/>
  </div>
  Directive:
  <directive value="model.value"></directive>
</div>