【问题标题】:Two directives, respective pair of controllers and same templateUrl两个指令,分别是一对控制器和相同的 templateUrl
【发布时间】:2016-03-07 22:24:01
【问题描述】:

我是 AngularJS 的新手。我想为两个指令使用一个模板。在交易中,第一个指令覆盖了第二个指令的行为。但是我为它们中的每一个指定了不同的控制器。我认为原因是控制器隔离了范围。我需要第一个控制器执行它自己的 filterChanged() 函数,第二个控制器也是如此。与字段相同:蒙太奇、支付、取消和不活动。我试图操纵范围(true,'isolate',false,{}),transclude(true,false,'element'),范围字段('@','=','&')。 'controllerAs' 和 'controllerBindTo' 不适合我的任务,因为我想抛出单独的控制器文件。

请帮帮我。手落下。

源代码如下。

过滤器.html

<div class="filter">
<p class="text-center"><b ng-bind="::title"></b></p>
<div class="contact-item-requires-filter">
    <div class="contact-item-require">
        <input id="contact-item-montage-filter" class="contact-item-require-montage" type="checkbox"
            ng-model="filter.montage"
            ng-change="filterChanged()">
        <label title="Монтажи" for="contact-item-montage-filter"></label>
    </div>
</div>

directive1.js

angular.module('qualityControl')
.directive('requiresFilterDirective', function() {
    return {
        templateUrl: '../templates/pages/quality/filter.html',
        controller: 'requiresFilterController'
    }
});

directive2.js

angular.module('qualityControl')
.directive('usersFilterDirective', function() {
    return {
        templateUrl: '../templates/pages/quality/filter.html',
        controller: 'usersFilterController'
    }
});

已更新。

【问题讨论】:

  • 您的两个指令都使用相同的控制器和相同的指令名称。我不明白你想要实现什么,但我可能会从那里开始。
  • Монтажи! Огонь !!! :)
  • 更正指令2.js

标签: angularjs


【解决方案1】:

用'&'添加变量,这是函数声明

.directive('requiresFilterDirective', function () {
        return {
            restrict: 'AE',
            scope: {
                functionToCall: '&',
                someData: '='
            },
            templateUrl: '../templates/pages/quality/filter.html',
            link: function (scope, elem, attrs) {
                scope.functionToCall();
                console.log('scope.someData', scope.someData);
            }
        }
    })

用法:

<requires-filter-directive function-to-call="myFunctOne()" some-data="yourJsonObject"></requires-filter-directive>

<requires-filter-directive function-to-call="myFunctTwo()" some-data="yourJsonObject"></requires-filter-directive>

并在你的主控制器中声明这些函数:

$scope.myFunctOne = function() {
    alert("111")
};

$scope.myFunctTwo = function() {
    alert("222")
};

$scope.yourJsonObject = {'aaa':123};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-01
    • 2015-07-05
    • 1970-01-01
    • 2017-06-01
    相关资源
    最近更新 更多