Angular自定义指令有多个问题 - 不能使用replace:true,不会触发第二次

时间:2015-11-03 23:05:05

标签: angularjs triggers angular-directive

我已经制作了一个自定义的Angular指令:

HTML - mydirective(data-datasource="mydirectivedata", data-updatefn="mydirectiveupdate")

控制器 -

$scope.mydirectivedata = //array of objects from API service call using $http
$scope.mydirectiveupdate = function(a, b) {}

指令 -

.directive('mydirective', function() {
            return {
                restrict: 'E',
                replace: true,
                scope: {
                    mydirectivedata: '=',
                    mydirectiveupdate: '&',
                },
                controller: function($scope) {
                    $scope.updatefunction = function(id, type) {
                        $scope.mydirectiveupdate()(id, type);
                    };
                },
                templateUrl: '/partials/mydirective.html'
            }
        })

部分 -

<li data-ng-repeat="type in datasource.types">
  <input id="{{type.id}}" type="radio" name="{{$parent.datasource.id}}" src="" alt="{{$parent.datasource.id}}" aria-label="type.name" checked ng-value="true" data-ng-class="radio-selector" data-ng-model="type.isDefault" data-ng-change="updatefunction($parent.datasource.id,type)">
  <label for="{{type.id}}"><span style="background-image: url(undefined)"></span>
    <h2 data-ng-bind="type.name">type.name</h2>
    <p data-ng-bind="{{type.price}} | number :2" class="price">{{type.price}}</p>
    <p data-ng-bind="type.description">type.description</p>
  </label>
</li>

我的要求是: 1.选择输入单选按钮后,触发updatefunction,然后通过mydirectiveupdate函数传递所需参数

问题是:  1.如果我在我的指令中使用replace: true,则$scope.updatefunction本身不会被触发  2.如果我不使用replace: true,则会触发更新功能,但每次输入点击只会触发一次。第二次单击输入时,函数不会被触发!

HELP !!

1 个答案:

答案 0 :(得分:0)

我不明白你帖子的第二行:

  

HTML - mydirective(data-datasource="mydirectivedata", data-updatefn="mydirectiveupdate")

我想你的意思是:

<mydirective data-mydirectivedata="mydirectivedata" data-mydirectiveupdate="mydirectiveupdate" />

我也不知道是什么

  

部分 -

我认为这是你的指令的模板。如果是这样,则无法使用replace: true,因为您没有父DOM元素。整个 <li data-ng-repeat="type in datasource.types">...</li>代码中的<ul>代码。

一旦你有数据源(这个HTML和部分),一旦这是mydirectivedata(指令定义)。检查您的示例,并考虑所有这些因素。