Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在AngularJS中将angular.element()转换为模板_Javascript_Angularjs - Fatal编程技术网

Javascript 在AngularJS中将angular.element()转换为模板

Javascript 在AngularJS中将angular.element()转换为模板,javascript,angularjs,Javascript,Angularjs,我正在尝试将当前使用angular.element()的指令转换为模板,但到目前为止,模板一不起作用。 作为AngularJS的新手,我想我犯了一些大错误,但到目前为止我还看不出来。 有什么建议吗 这是原件: app.directive('theDirective', ['musicInfoService', function(musicInfoService) { return { restrict: 'A', scope: { position: '@', last: '@', relea

我正在尝试将当前使用angular.element()的指令转换为模板,但到目前为止,模板一不起作用。 作为AngularJS的新手,我想我犯了一些大错误,但到目前为止我还看不出来。 有什么建议吗

这是原件:

app.directive('theDirective',  ['musicInfoService',
function(musicInfoService) {
return {
restrict: 'A',
scope: { position: '@', last: '@', release: '=',
    artist: '=', versions: '@' },
link: function(scope, element, attrs) {

  element.bind('click', function() {
    // Highlight clicked element
    angular.element(document.querySelector('.clicked')).removeClass('clicked');
    element.addClass('clicked');

    // Create the collapse element or select existing one
    var collapseQuery = document.querySelector('#collapse');
    var collapse = collapseQuery === null ?
      angular.element('<div id="collapse" ng-controller="VersionController" class="col-md-12 col-xs-12"> \
            <div class="inner"> \
              <ul> \
                <li class="title">{{release.title}}</li> \
                <li class="row top" ng-show="versions"> \
                  <div class="col-md-1">Year</div> \
                  <div class="col-md-3">Format</div> \
                  <div class="col-md-3">Label</div> \
                  <div class="col-md-2">Country</div> \
                  <div class="col-md-2">Cat. Nº</div> \
                </li> \
                <li class="row" ng-show="versions" ng-repeat="version in versions | filter: \'!file\' | orderBy: version.released"> \
                  <div class="col-md-1">{{(version.released | release:4) || \'-----\'}}</div> \
                  <div class="col-md-3">{{version.format}}</div> \
                  <div class="col-md-3">{{version.label}}</div> \
                  <div class="col-md-2">{{version.country}}</div> \
                  <div class="col-md-2">{{version.catno}}</div> \
                </li> \
                <li class="row top" ng-hide="!release.format"> \
                  <div class="col-md-1">Year</div> \
                  <div class="col-md-3">Format</div> \
                  <div class="col-md-3">Label</div> \
                </li> \
                <li class="row" ng-hide="!release.format"> \
                  <div class="col-md-1">{{release.year}}</div> \
                  <div class="col-md-3">{{release.format}}</div> \
                  <div class="col-md-8">{{release.label}}</div> \
                </li> \
              </ul> \
            </div> \
          </div>') :
      angular.element(collapseQuery);

    // Based on the position of the clicked element calculate the rounded number up to the nearest multiple of four
    var calculatedPosition = Math.ceil(scope.position / 4) * 4;

    // Get the element at the calculated position or the last one
    var calculatedQuery = document.querySelector('[position="' + calculatedPosition + '"]');
    if (calculatedQuery === null) calculatedQuery = document.querySelector('[last="true"]');;

    var calculatedElement = angular.element(calculatedQuery);

    // Insert the collapse element after the element at the calculated position
    calculatedElement.after(collapse);
    // Highlight the calculated element
    angular.element(document.querySelector('.calculated')).removeClass('calculated');
    calculatedElement.addClass('calculated');
  });

  scope.$on('$destroy', function() {
    element.unbind('click');
  });
}
};
}
]);
app.directive('theDirective',['musicInfoService',
功能(音乐服务){
返回{
限制:“A”,
作用域:{position:'@',last:'@',release:'=',
艺术家:'=',版本:'@'},
链接:函数(范围、元素、属性){
元素绑定('单击',函数(){
//高亮显示单击的元素
元素(document.querySelector('.clicked')).removeClass('clicked');
元素addClass('clicked');
//创建折叠图元或选择现有图元
var collapseQuery=document.querySelector(“#collapse”);
var collapseQuery=collapseQuery==null?
角元素('\
\
    \
  • {{release.title}}
  • \
  • \ 年\ 格式\ 标签\ 国家\ 类别编号:\
  • \
  • \ {{(version.release{124; release:4){124;}\'----\'}\ {{version.format}\ {{version.label}\ {{version.country}\ {{version.catno}\
  • \
  • \ 年\ 格式\ 标签\
  • \
  • \ {{release.year}\ {{release.format}\ {{release.label}\
  • \
\ \ ') : 角元素(折裂方程); //根据单击元素的位置,计算四舍五入的数字,直到四的最接近倍数 var calculatedPosition=Math.ceil(scope.position/4)*4; //获取计算位置或最后一个位置的元素 var calculatedQuery=document.querySelector('[position=“'+calculatedPosition+'“]); if(calculatedQuery==null)calculatedQuery=document.querySelector('[last=“true”]');; var calculatedElement=angular.element(calculatedQuery); //在计算位置的图元后插入折叠图元 计算后的元素(塌陷); //高亮显示计算的图元 元素(document.querySelector('.computed')).removeClass('computed'); CalculateElement.addClass('calculated'); }); 作用域.$on(“$destroy”,函数(){ 元素。解除绑定(“单击”); }); } }; } ]);
转换后的一个:

  app.directive('theDirective',  ['musicInfoService',
  function(musicInfoService) {
  return {
    restrict: 'A',
    scope: { position: '@', last: '@', release: '=', artist: '='},
    template: '<div id="collapse" ng-controller="VersionController" class="col-md-12 col-xs-12"> \
                <div class="inner"> \
                  <ul> \
                    <li class="title">{{release.title}}</li> \
                    <li class="row top" ng-show="versions"> \
                      <div class="col-md-1">Year</div> \
                      <div class="col-md-3">Format</div> \
                      <div class="col-md-3">Label</div> \
                      <div class="col-md-2">Country</div> \
                      <div class="col-md-2">Cat. Nº</div> \
                    </li> \
                    <li class="row" ng-show="versions" ng-repeat="version in versions | filter: \'!file\' | orderBy: version.released"> \
                      <div class="col-md-1">{{(version.released | release:4) || \'-----\'}}</div> \
                      <div class="col-md-3">{{version.format}}</div> \
                      <div class="col-md-3">{{version.label}}</div> \
                      <div class="col-md-2">{{version.country}}</div> \
                      <div class="col-md-2">{{version.catno}}</div> \
                    </li> \
                    <li class="row top" ng-hide="!release.format"> \
                      <div class="col-md-1">Year</div> \
                      <div class="col-md-3">Format</div> \
                      <div class="col-md-3">Label</div> \
                    </li> \
                    <li class="row" ng-hide="!release.format"> \
                      <div class="col-md-1">{{release.year}}</div> \
                      <div class="col-md-3">{{release.format}}</div> \
                      <div class="col-md-8">{{release.label}}</div> \
                    </li> \
                  </ul> \
                </div> \
              </div>',
    replace: false,
    link: function(scope, elem, attrs) {

      elem.bind('click', function() {
        // Highlight clicked element
        elem(document.querySelector('.clicked')).removeClass('clicked');
        elem.addClass('clicked');

        // Create the collapse element or select existing one
        var collapseQuery = document.querySelector('#collapse');
        var collapse = collapseQuery === null ?
        elem(collapseQuery)

        // Based on the position of the clicked element calculate the rounded number up to the nearest multiple of four
        var calculatedPosition = Math.ceil(scope.position / 4) * 4;

        // Get the element at the calculated position or the last one
        var calculatedQuery = document.querySelector('[position="' + calculatedPosition + '"]');
        if (calculatedQuery === null) calculatedQuery = document.querySelector('[last="true"]');;

        var calculatedElement = angular.element(calculatedQuery);

        // Insert the collapse element after the element at the calculated position
        calculatedElement.after(collapse);

      });

      scope.$on('$destroy', function() {
        elem.unbind('click');
      });
    }
  };
}
]);
app.directive('theDirective',['musicInfoService',
功能(音乐服务){
返回{
限制:“A”,
作用域:{position:'@',last:'@',release:'=',artist:'='},
模板:'\
\
    \
  • {{release.title}}
  • \
  • \ 年\ 格式\ 标签\ 国家\ 类别编号:\
  • \
  • \ {{(version.release{124; release:4){124;}\'----\'}\ {{version.format}\ {{version.label}\ {{version.country}\ {{version.catno}\
  • \
  • \ 年\ 格式\ 标签\
  • \
  • \ {{release.year}\ {{release.format}\ {{release.label}\
  • \
\ \ ', 替换:false, 链接:功能(范围、要素、属性){ 元素绑定('单击',函数(){ //高亮显示单击的元素 elem(document.querySelector('.clicked')).removeClass('clicked'); 元素addClass('clicked'); //创建折叠图元或选择现有图元 var collapseQuery=document.querySelector(“#collapse”); var collapseQuery=collapseQuery==null? 元素(衣领装备) //根据单击元素的位置,计算四舍五入的数字,直到四的最接近倍数 var calculatedPosition=Math.ceil(scope.position/4)*4; //获取计算位置或最后一个位置的元素 var calculatedQuery=document.querySelector('[position=“'+calculatedPosition+'“]); if(calculatedQuery==null)calculatedQuery=document.querySelector('[last=“true”]');; var calculatedElement=angular.element(calculatedQuery); //在计算位置的图元后插入折叠图元 计算后的元素(塌陷); }); 作用域.$on(“$destroy”,函数(){ 元素解除绑定(“单击”); }); } }; } ]);
编辑:此指令来自

编辑II:下面是我尝试实现它的地方

    var collapse = collapseQuery === null ?
    elem(collapseQuery)
三元运算符中缺少“else”选项。分号呢

    var collapse = collapseQuery === null ?
    elem(collapseQuery) : "Some other option";
你的控制器代码很混乱,我放弃了阅读。试着用一种更“有角度”的方式来定义它

这可能不是个好主意
app.controller('Ctrl', ["$scope" , "musicInfoService", 
  function ($scope, musicInfoService) {
    $scope.getDetails = function (id) {
      // Your function goes here.
    };

    $scope.search = function () {
      musicInfoService.doSomething();
    };
  }
]);
ng-controller="VersionController"