У меня есть требование получить значение области действия настраиваемой директивы. Я пытаюсь получить доступ к внутренней функции scope.cellId. это не работает. Не могли бы вы дать решение для этого.

Заранее спасибо..

Вот ссылка на скрипку:

http://jsfiddle.net/na8udkkt/

Вот какой контроллер:

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

bosAppModule.controller('testCtrlr',['$scope', function($scope){
    $scope.layoutData =[ {layouttablecelltableid:"dsafdasfasdf"},{layouttablecelltableid:"aaaaaa"}]
}]);

bosAppModule.directive('layoutTableCellView',function($compile){

var layoutTableCellObj={};

    linkFnTableCell=function(scope, element, attributes, controllerCtrl) {
        console.log("#####"+scope.cellId);
    };

    layoutTableCellObj.restrict='AE';
    layoutTableCellObj.replace='true';  
    layoutTableCellObj.scope={layoutData:'=',cellId:'@'};
    layoutTableCellObj.template="<div cell-id='tablecell.layouttablecelltableid' style='background-color:grey;height:200px;'   layout-data='layoutData' ng-repeat='tablecell in layoutData' >{{tablecell.layouttablecelltableid}}</div>";


    layoutTableCellObj.link = linkFnTableCell;

    return layoutTableCellObj;  
});

Вот HTML:

<div ng-app="testapp">
    <div ng-controller="testCtrlr">
        <layout-table-cell-view> </layout-table-cell-view>
    </div>
</div>
0
bagya 8 Июн 2016 в 10:45
Я не уверен, что вы понимаете, как работает функция ссылки. Ответ Руди показывает, как получить ваши данные внутри функции ссылки. Но я все еще не понимаю, чего вы здесь пытаетесь достичь.
 – 
sasklacz
8 Июн 2016 в 15:21

2 ответа

Я не уверен, что понимаю, чего вы там пытаетесь достичь. Вы можете дать более подробную информацию ? Я почистил вашу скрипку, потому что это было немного беспорядочно, и angular не загружался для меня:

https://jsfiddle.net/6xLt4pja/1/

Директива:

bosAppModule.directive('layoutTableCellView', [
    function () {
      return {
        restrict: 'AE',
        template: "<div style='background-color:grey;height:200px;' ng-repeat='tablecell in layoutData'>{{tablecell.layouttablecelltableid}}</div>",
        scope: {
          layoutData:'='
        },
        link: function (scope) {
                    console.log('SCOPE: ', scope.layoutData);
        }
      };
    }
  ]);

И html:

<div ng-app="testapp">
    <div ng-controller="testCtrlr">
        <layout-table-cell-view layout-data="layoutData"></layout-table-cell-view>
    </div>
</div>
1
sasklacz 8 Июн 2016 в 15:02

Не совсем уверен, что вам нужно, но если вы хотите получить доступ к значениям области, которые вы уже объявили, вы можете получить к ним доступ в своей функции следующим образом:

linkFnTableCell = function(scope, element, attributes, controllerCtrl) {
    console.log("#####" + scope.cellId); // your own log

    for(var i = 0; i < scope.layoutData.length; i++){
      console.log("#####" + scope.layoutData[i].layouttablecelltableid);
    }
  };

Это даст вам все внутренние идентификаторы - если вы хотите также cellId, синтаксис станет более сложным.

0
Rudi Ørnhøj 8 Июн 2016 в 15:11
Scope.layoutData [0] .layouttablecelltableid - таким образом всегда получается только один идентификатор. как получить все id
 – 
bagya
8 Июн 2016 в 12:20