Javascript 如果编译中没有';不回答

Javascript 如果编译中没有';不回答,javascript,angularjs,angularjs-directive,Javascript,Angularjs,Angularjs Directive,我试图用angular元素创建元素并附加到某个元素。如果根据范围变量条件告诉新元素是否需要可见,则新元素有一个ng。但出于某种原因,它对变化没有反应。代码如下: return { restrict: 'A', scope: { object: '=on' }, compile: function(elem) { var td = angular.element('<td></td>' ), closeRow = angula

我试图用angular元素创建元素并附加到某个元素。如果根据范围变量条件告诉新元素是否需要可见,则新元素有一个ng。但出于某种原因,它对变化没有反应。代码如下:

return {
  restrict: 'A',
  scope: {
    object: '=on'
  },
  compile: function(elem) {
    var td = angular.element('<td></td>' ),
        closeRow = angular.element('<i class="fa fa-arrow-circle-right" ng-if="!object.open"></i>' ),
        openRow = angular.element('<i class="fa fa-arrow-circle-down" ng-if="object.open"></i>');
    td.append(closeRow ).append(openRow);
    elem.append(td);
    return link;
  }
}

function link($scope, elem) {
  $scope.object.open = false;
  elem.on( "click", function() {
    $scope.$apply( function() {
      $scope.object.open = ! $scope.object.open;
    });
  });
}
返回{
限制:“A”,
范围:{
对象:'=on'
},
编译:函数(elem){
var td=角度元素(“”),
closeRow=角度元素(“”),
openRow=角度元素(“”);
td.append(closeRow).append(openRow);
附加元素(td);
返回链接;
}
}
功能链接($scope,elem){
$scope.object.open=false;
元素打开(“单击”,函数(){
$scope.$apply(函数(){
$scope.object.open=!$scope.object.open;
});
});
}
}

以及html:

<tr slide-toggle-row on="post">
  <td>{{post.title}}</td>
    <td>{{post.text}}</td>
  </tr>
<tr>

{{post.title}
{{post.text}

您不应该为此使用编译函数。尝试使用link function+$compile service注入与范围对象正确连接的HTML:

return {
    restrict: 'A',
    scope: {
        object: '=on'
    },
    link: function(scope, elem) {

        var td = angular.element('<td></td>'),
            closeRow = angular.element('<i class="fa fa-arrow-circle-right" ng-if="!object.open"></i>'),
            openRow = angular.element('<i class="fa fa-arrow-circle-down" ng-if="object.open"></i>');

        td.append(closeRow).append(openRow);
        $compile(td)(scope);

        elem.append(td);

        scope.object.open = false;
        elem.on("click", function() {
            scope.$apply(function() {
                scope.object.open = !scope.object.open;
            });
        });
    }
}
返回{
限制:“A”,
范围:{
对象:'=on'
},
链接:功能(范围、要素){
var td=角度元素(“”),
closeRow=角度元素(“”),
openRow=角度元素(“”);
td.append(closeRow).append(openRow);
$td(范围);
附加元素(td);
scope.object.open=false;
元素打开(“单击”,函数(){
作用域$apply(函数(){
scope.object.open=!scope.object.open;
});
});
}
}

演示:仅供参考,不要调用链接函数的scope
$scope
。它不进行提供者查找,所以只需将其称为
scope