2017-01-10 137 views
0

我已经渲染HTML后使用jQuery的AngularJS调用 后的控制器是渲染angularJS HTML

App.controller('controller', ['$scope', '$http', '$sce', '$routeParams', '$location', function ($scope, $http, $sce, $routeParams, $location) {  
    $http({ 
     //http call 
    }).then(function (response) { 
     $scope.requestpurpose = $sce.trustAsHtml(response.data.requestpurpose); 

    $scope.$watch('requestpurpose', function(newValue, oldValue) { 
     if(typeof newValue != 'undefined'){ 
     alert(newValue); 
     showAlreadySelected(); 
     } 
    }); 
}]); 

和jQuery脚本是

<script type="text/javascript"> 
    // it will show the div depending on purpose of request 
    function showAlreadySelected(){ 
     if ($("#1").is(":checked")) { 
      $("#veterinarian-info").show(); 
     } else { 
      $("#veterinarian-info").hide(); 
     } 
    } 
</script> 

这是我的HTML

<div class="row purpose-box" > 
    <div class="col-sm-12" ng-bind-html="requestpurpose"></div> 
</div> 

并在ajax调用下面的HTML是在ng-bind-html renering

<div class="boxes-check"> 
    <div class="box-one"> 
     <input checked="checked" rev="Annual exam" type = "checkbox" name = "request_purpose[]" ng-model=formData.request_purpose[1] onChange="angular.element(this).scope().changePurpose(this)" value = "1" class = "md-check" id = "1" > 
    </div> 
    <div class="box-two"> 
     <label title="" for="1"> 
      <span></span> 
      <span class="check"></span> 
      <span class="box"></span> Annual exam 
     </label> 
    </div> 
</div> 
<div class="boxes-check"> 
    <div class="box-one"> 
     <input checked="checked" rev="Spay or neuter surgery" type = "checkbox" name = "request_purpose[]" ng-model=formData.request_purpose[2] onChange="angular.element(this).scope().changePurpose(this)" value = "2" class = "md-check" id = "2" > 
    </div> 
    <div class="box-two"> 
     <label title="" for="2"> 
      <span></span> 
      <span class="check"></span> 
      <span class="box"></span> Spay or neuter surgery 
     </label> 
    </div> 
</div> 

,但我面临的问题是后角负载其调用showAlreadySelected功能,但不选择“#1”,一两件事,如果任何机构可以帮助任何jQuery的功能,这将打击ID为“#1,只要输入元素“,”#2“渲染到我的ng-bind-html div中。

+0

ID不应该以数字,我看到什么就内检测的变化是,你设置你的'$ scope.requestpurpose'到HTML字符串,但是你真的把它添加到DOM树? – ValLeNain

+0

实际上,我只是对旧开发人员构建的旧项目进行了一些更改,所以有一些错误是的,它将添加到DOM树中它的html是

hu7sy

回答

1

首先,我会将观察者移动到then之外,因为您每次进行ajax调用时都注册一个新的观察者。

我试过了,它有一个数字作为ID(但不推荐)。我们还需要您的HTML代码,因为它应该按照您实施的方式工作。是否通过ajax调用(=存在于$scope.requestpurpose)添加了#1节点还是始终存在于DOM中?

此外,你可以在showAlreadySelected函数中添加一个console.log以确保它被调用。

编辑

App.controller('controller', ['$scope', '$http', '$sce', '$routeParams', '$location', function ($scope, $http, $sce, $routeParams, $location) {  
    $http({ 
     //http call 
    }).then(function (response) { 
     $scope.requestpurpose = $sce.trustAsHtml(response.data.requestpurpose); 
     showAlreadySelected(); 
    }); 
}]); 
+0

它由ajax调用 – hu7sy

+0

为什么不移除观察器并调用'showAlreadySelected在修改'$ scope.requestpurpose'的值之后的函数? – ValLeNain

+0

它是异步调用,所以它不会等待它,它将首先调用showAlreadySelected函数 – hu7sy

0

我有DOMSubtreeModified绑定类股利

$('.purpose-box').bind("DOMSubtreeModified",function(){ 
     showAlreadySelected(); 
});