2015-08-22 75 views
1

我有一個文本類型的輸入,我需要這個輸入變成跨度取決於我的模型屬性的值。所以,我對成爲跨度輸入jquery的功能是:長角度角度模型屬性變化輸入類

$('.read').replaceWith(function(){ 
    return '<span class='+this.className+'>'+this.value+'</span>'  
}); 

而且我已經使用了NG指令是:NG-變化

<input id="1" type="text" ng-model="src.ViewModel.Model.DataA" ng-change="src.search(src.ViewModel.Model.DataA)"/> 

的方法是:

theController.prototype.search = function(data){ 
    if (data == 1) 
    { 
     theModel.DataA = data; 
     $('.read').replaceWith(function(){ 
      return '<span class='+this.className+'>'+this.value+'</span>'; 
     });  
    } 
}; 

和必須改變輸入是:

<input type="text" ng-model="src.ViewModel.Model.DataB" ng-class="{'read': src.ViewModel.Model.DataA == 1}" /> 

但它不起作用,所以,我該如何解決?

這裏是我的小提琴:Fiddle

任何幫助或建議,請...

回答

1

我不知道你爲什麼這樣做,你在做什麼,我懷疑有一個更好的辦法完成你的目標。

話雖如此,問題在於,在您的搜索功能中,您正在尋找一個類.read的元素,但該元素不存在。 ng-class將在此摘要循環運行後設置.read類,這意味着搜索函數運行後。

您可以通過使用$超時像解決這個問題:

$timeout(function(){ 
    $('.read').replaceWith(function(){ 
      return '<span class='+this.className+'>'+this.value+'</span>'; 
     });  
    } 
}); 

這將使它所以你的代碼運行在接下來的$消化週期,.read類已被添加之後。

此外,初始化您的DataA屬性與1以外的東西。否則,你必須先設置文本框的東西,然後到1,以便ng-change觸發。

0

@freddy我對你想要改變的元素加以監視。 喜歡的東西在這份

$scope.$watch(function() { 
     //here watchme is the input you wish to change into span 
     return $("#watchme").hasClass('read'); 
    }, function() { 
     $('.read').replaceWith(function() { 
      return '<span>' + $scope.ViewModel.DataA + '</span>' 
     }); 
    }); 

小提琴:http://jsfiddle.net/3n8o3ud7/5/ 希望這能解決你的目的。