指令控制器功能不起作用

时间:2017-08-08 12:52:40

标签: angularjs controller directive

我是角度js的新手。我在指令中遇到了问题。我有一个ng-href,我从中调用了一个函数编写的指令控制器中的指令。我控制台控制器,它正在工作,但功能不起作用。

这是我的config.js文件:

 angular.module('movieApp').config(['$urlRouterProvider','$stateProvider', '$locationProvider', function($urlRouterProvider,$stateProvider,$locationProvider){
            $stateProvider.state('home',{
                url : '/home',
                templateUrl : 'app/components/home/home.html',
                controller : 'HomeController',
            }).state('yearsort',{
                url : '/yearsort/:id',
                template : '<year-sort></year-sort>',       
            });
            $urlRouterProvider.otherwise('home');
    }]);

这两个链接在我的主页上:

   <ul>
           <li><a ng-href="#/yearsort/oldtonew">Old to new</a></li> 
           <li><a ng-href="#/yearsort/newtoold">New to old</a></li>
      </ul>

这是我的指令文件:

  angular.module('movieApp.yearsort.directives', []).directive('yearSort',[function(){
    return{
    restrict : 'AEC',
        replace : true,
        transclude :  true,
        scope : {
             yearSortFn: '&'
        },
        controller : 'YearsortController',
        templateUrl : 'app/components/yearsort/yearsort.html',
    };
}]);

这是我的YearsortController文件,其中显示了console.log('abc'),但该函数无效。

  angular.module('movieApp.yearsort.controller', []).controller('YearsortController', ['$scope','HomeFactory','$timeout','$state',function($scope,HomeFactory,$timeout,$state) {

    $scope.sortParam = $state.params.id;
        console.log('abc');

   $scope.yearSortFn = function(){
        HomeFactory.movieApiFn()
            .then(function(data){
                if($scope.sortParam=='oldtonew'&&$scope.sortParam!='newtoold'){
                    $scope.yearlyMovie = data.sort(function(a, b){return a.title_year - b.title_year});
                }
                else if($scope.sortParam=='newtoold'&&$scope.sortParam!='oldtonew'){
                    $scope.yearlyMovie = data.sort(function(a, b){return b.title_year - a.title_year});
                }
            },function(){
                console.log('data cannot retrieved');
            });
    } 

     <div ng-controller="YearsortController">
    <year-sort yearSortFn="yearSortFn()"></year-sort>
  </div>

这是我的模板文件:

<div ng-controller="YearsortController">
        <div ng-repeat="movie in yearlyMovie track by $index" class="col-xs-10 col-sm-4 col-md-3 col-lg-3">
          <div class="panel panel-primary">
           <div class="panel-heading">{{movie.movie_title}}</div>               
          </div>
        </div>
     </div>
</div>

1 个答案:

答案 0 :(得分:0)

总的来说,根据您提供的内容,这是我在审核后可以提出的内容。也就是说,如果这没有用,请为社区提供一个演示,以便更好地提供帮助。至少解释一下是否发生了什么,错误与否。

您有一个额外的<div>标记:

<div ng-controller="YearsortController">
    <div ng-repeat="movie in yearlyMovie track by $index" class="col-xs-10 col-sm-4 col-md-3 col-lg-3">
        <div class="panel panel-primary">
            <div class="panel-heading">{{movie.movie_title}}</div>
        </div>
    </div>
</div>
</div> <!-- Remove this -->

此外,在您的开场<div ...>中,将其更改为<div>

此外,您的控制器代码下的HTML代码段是什么?我会删除它。

     <div ng-controller="YearsortController">
    <year-sort yearSortFn="yearSortFn()"></year-sort>
  </div>

因此,也要删除它(你没有使用它):

scope : {
     yearSortFn: '&'
},