Angularjs 呈现元素后的element.text()

Angularjs 呈现元素后的element.text(),angularjs,angularjs-directive,angularjs-ng-repeat,Angularjs,Angularjs Directive,Angularjs Ng Repeat,因此,我在同一个元素上有两个自定义过滤器,每个过滤器都有共享的作用域。 我希望第二个指令读取元素文本,但问题是,元素文本是由第一个指令生成的 app.directive('newEl', function($compile) { return { link: function($scope, element) { console.log("link element : ", element.text()) }, controller:

因此,我在同一个元素上有两个自定义过滤器,每个过滤器都有共享的作用域。 我希望第二个指令读取元素文本,但问题是,元素文本是由第一个指令生成的

app.directive('newEl', function($compile) {
    return {
        link: function($scope, element) {

        console.log("link element : ", element.text())

        }, controller: function($scope, $element) { 

        console.log("controller text ",$element.text())           
        }
      }     
});

首先,您可以尝试使用angular.element.ready。第二个是postLink。

您可以尝试使用
$timeout
它将确保在摘要周期之后运行timeout表达式,并将数据绑定到DOM。由于在同一个元素上有
ng repeat
,因此可以确保只有在将数据绑定到该元素后才能渲染该元素

  $timeout(function(){
     console.log("link element : ", element.text(), $scope.item)
  }, 0, false); //set false if you dont want to trigger a digest
但是这样做很奇怪,您可以使用一个独立的作用域指令,通过双向绑定将
item
的值绑定到那里

在指令设置中:

 {
   scope:{item:'='}
 },
并在指令中作为
$scope.item
访问它。您还可以使用
controllerAs
bindToController
并将
item
作为控制器实例的属性。避免访问控制器中的
$element
,您可以使用此技术。隔离作用域帮助您创建一个自包含的组件,而不与使用者紧密耦合

或者简单地将其设置为属性为
编辑文本
,即

<td ... edit-text="item" ng-repeat="item in items">{{item}}</td>
另外,由于您的指令不创建范围,您也可以将其作为
$scope.item
访问,但不建议这样做,因为它不够明确,并且对父级存在一些假设

angular.module('app',[]).run(函数($timeout,$rootScope){
$timeout(函数(){
$rootScope.items=[1,2,3,4,5,6,7];
}, 2000);
}).directive('editText',函数($compile,$timeout){
返回{
链接:函数($scope,element,attrs){
log($scope.eval(attrs.editText),$scope.item);
$timeout(函数(){
log(“link元素:”,element.text())
});
},
控制器:功能($scope){
}
}
});

{{item}}

首先,有可选要求。但无论如何,获取元素文本是如此的奇怪。。。你为什么需要这个?标签数据究竟是什么?可以用过滤器代替吗?看起来你在混合视图和模型…@PetrAveryanov,实际上我在这个指令中使文本在单击时可编辑,所以我添加了onclick行为,即使用save和cancel绘制文本,我只需要元素的实际文本,所以我将要编辑的初始值放在这个文本中。这就是您将参数传递给directive@PetrAveryanov我不想在我的页面中有孤立的作用域,因为有太多特别的作用域,我使用ngrepeat会减慢页面的速度,而这些作用域不起作用,甚至没有进入它的功能
var item = $scope.$eval(attrs.editText);