将不同的数组变量传递给指令

时间:2014-05-13 06:45:26

标签: javascript angularjs

在一个控制器中,我已经定义了两个不同的数组,我需要将不同的数组传递给指令,但是只传递相同的项数组。

实际上这只是片段。在我的实际代码中,我在另一个内部使用该指令。

这是导致问题还是其他任何方式?

<div my-sticky tags="items" template_name="test2.html"></div>
<div my-sticky tags="kititems" template_name="test2.html"></div>  

JS:

app.controller('MyCtrl', function($scope, $http) {
    $scope.items = [
            { id: 18, text: '1' },
            { id: 28, text: '2' },
            { id: 38, text: '3' }
        ];
    $scope.kititems = [
            { id: 0, text: '001' },
            { id: 028, text: '002' },
            { id: 038, text: '003' }
        ];
});

app.directive("mySticky", function($http, $compile) {
    return {
        restrict : "A",
        scope : {
            templateName: "@",
            tags: "=",
        },
        templateUrl : function(el, attrs) {
            return attrs.templateName;
        },
        controller : function($http, $scope, $element, $sce, $templateCache, $compile, $attrs) {

            $scope.drawerStyle = {left: '140px'};

            //$scope.CommonArray=$attrs.tags;

        },
        replace : false,
        transclude : false,
        link : function(scope, element, attrs) {
            // change element just to show we can
        }
    };
});

1 个答案:

答案 0 :(得分:0)

试试这个

Working Demo

你的templateURL(test2.html)里面应该是这样的,

<div ng-repeat="tag in tags"> {{tag.id}} {{tag.text}} </div>

您可能尝试访问items or kititems两者都不在当前范围内,因为您在此处使用了隔离范围。此处使用的清晰度模板而不是templateURL。

HTML标记:

<div ng-controller="MyCtrl">
   MyCtrl
<div my-sticky tags="items"></div>
    <hr/>
<div my-sticky tags="kititems"></div> 
 </div>

角度模块

var app = angular.module("myApp",[]);

app.controller('MyCtrl', function($scope) {
    $scope.items = [
            { id: 18, text: '1' },
            { id: 28, text: '2' },
            { id: 38, text: '3' }
        ];
    $scope.kititems = [
            { id: 0, text: '001' },
            { id: 028, text: '002' },
            { id: 038, text: '003' }
        ];
});

app.directive("mySticky", function($http, $compile) {
    return {
        restrict : "A",
        scope : {
            templateName: "@",
            tags: "=",
        },
        template :'<div ng-repeat="tag in tags"> {{tag.id}} {{tag.text}} </div>',
        controller : function($http, $scope, $element, $sce, $templateCache, $compile, $attrs) {

            $scope.drawerStyle = {left: '140px'};

           // console.log($scope);
            //$scope.CommonArray=$attrs.tags;

        },
        replace : false,
        transclude : false,
        link : function(scope, element, attrs) {
            // change element just to show we can
        }
    };
});