在指令中调用控制器功能

时间:2014-04-09 07:20:58

标签: javascript html angularjs angularjs-directive angularjs-scope

我需要您对AngularJS问题的帮助:我创建了一个指令来管理客户/办事处的情况(两个选择框,一个用于客户,一个用于与所选客户相关的办公室)。当我加载包含指令的html页面时,我必须检查officeID"是否存在"并且,在这种情况下,使用基于该officeID的正确值填充html选择。为此,我必须在指令的控制器中调用一个函数。这是我的指示:

angular.module("app").directive('myCustomersOffices', ["ConstantsService", 
    function(ConstantsService){

    return {
        restrict: 'E',
        scope : {
            office : '='
        },
        controller : 'customersOfficesController',
        templateUrl: ConstantsService.URL.BASE_APP+'/bundles/customers/views/customersOffices.html',
        link : function (scope, elem, attrs, controller) {
            //!!!!!!!!!!!!
            //Here I would like to call getOfficesByOfficeID(officeID), a function
            //contained in the controller 
            //!!!!!!!!!!!!!!!!!!!!
        }
    };

}]);

这是我的html指令模板:

<div id="customer-and-offices">
    <select class="form-control" id="activity-customers"
            data-ng-change="getOffices(selectedCustomer)" data-ng-options="customer.ID as customer.name for customer in customers" data-ng-model="selectedCustomer">
        <option value="">Choose customer...</option>

    </select>

    <select class="form-control" id="activity-offices"
            data-ng-options="office.ID as office.name for office in customerOffices" data-ng-model="office">
        <option value="">Choose office...</option>
    </select>
</div>

这就是我在主html页面中调用指令的方式:

<my-customers-offices office="activity.get().officeID"></my-customers-offices>

您可以阅读上述所有内容,从客户选择(&#34;正常&#34;案例)开始检索办公室。但是,正如我所说,如果officeID&#34;存在,我想调用函数getOfficeByOffice&#34;当html主页&#34;准备就绪时#34;。如何将可能的officeID传递给链接指令功能?提前谢谢。

1 个答案:

答案 0 :(得分:1)

通常,在控制器中使用方法是个坏主意。我建议您创建包含可跨指令和控制器共享的功能的服务模块。然后,它只需要在主应用程序的任何位置注入模块(和服务)。

Here's a working fiddle有点接近你想要的。

代码:

'use strict';

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

.controller('MyCtrl', function ($scope) {
    $scope.variable = "this";
})

.directive('myDirective', function () {
    return {
        template: '{{variable}} is accessible here, so are functions.'
    };
});

HTML;

<div ng-app="myApp" ng-controller="MyCtrl">
    <div my-directive></div>
</div>