【问题标题】:angular directive referring to controller角度指令指的是控制器
【发布时间】:2015-01-29 16:02:07
【问题描述】:

我以为我的语法是正确的,所以我不明白这个错误来自哪里。

TypeError: undefined is not a function

此错误出现在指令第 13 行:var refresh = scope.reloadFunction()。

我没有正确指向 getCampaignData 吗?

指令:

1    angular.module('sysomos.ads').directive('sysReportResubmit', ['$api', '$alerts',
2       function ($api, $alerts) {
3           return {
4               restrict: 'A',
5               scope: {
6                   reloadFunction: '&'
7               },
8               link: function (scope, element) {
9                   element.on('click', function (e) {
10                      $api.put('', 'myAPICall').
11                          success(function (data, status, headers, config) {
12                              scope.results = data;
13                              var refresh = scope.reloadFunction();
14                              refresh.then(function () {**
15                                  $(target).removeClass('panel-loading');
16                              }
17                          });
18                      }).
19                  }
20              }
21          });
22      };
23    }

控制器

1    angular.module('sysomos.ads').controller('AudienceDetailsController', AudienceDetailsController);
3    AudienceDetailsController.$inject = ['$scope', '$api', '$http','$state', '$q', '$filter', '$modal', 'AudienceListsService'];
3    function AudienceDetailsController($scope, $api, $http, $state, $q, $filter, $modal, AudienceListsService) {
4       $scope.**getCampaignData** = function(){
5           // reload page data
6       }
7    }

HTML 模板

1    <section id="details" ng-controller="AudienceDetailsController">
2       <a
3           class="tabflowButton" reload-function="getCampaignData" sys-report-resubmit>
4               Resubmit
5       </a>
6    </section>

【问题讨论】:

    标签: angularjs


    【解决方案1】:

    这里的问题是&amp; 指的是一个表达式。

    传入函数名需要大括号:

    <section id="details" ng-controller="AudienceDetailsController">
      <a class="tabflowButton" reload-function="getCampaignData()" sys-report-resubmit>Resubmit</a>
    </section>
    

    这个视频确实有助于理解隔离范围: https://egghead.io/lessons/angularjs-understanding-isolate-scope

    【讨论】:

    • 对,所以我进行了更改,然后我得到“TypeError:无法读取未定义的属性'then'”。现在它无法识别 reload 函数包含任何内容。
    • 您在 getCampaignData() 函数返回的对象上调用 then()。确保它返回一个对象并且它包含必要的功能。
    猜你喜欢
    • 1970-01-01
    • 2016-06-21
    • 1970-01-01
    • 1970-01-01
    • 2015-07-19
    • 1970-01-01
    • 1970-01-01
    • 2015-07-07
    • 1970-01-01
    相关资源
    最近更新 更多