ajax通过JSF更新AngularJS后,AngularJS停止工作



我有以下JSF+AngularJS表单:

<h:form id="fmMain1" enctype="multipart/form-data" prependId="false">
    <p:commandButton value="Edit" action="#{testBean.updateMode}"
        update="@form" process="@form"/>
    <h:panelGrid rendered="#{testBean.mode eq 'EDIT'}">
        <input ng-show="true" type="text" ng-model="sometext" />
        <h1>Hello {{ sometext }}</h1>
    </h:panelGrid>
    <h:panelGrid rendered="#{testBean.mode eq 'VIEW'}">
        <input ng-show="true" type="text" ng-model="sometext" />
        <h1>Hello {{ sometext }}</h1>
    </h:panelGrid>
</h:form>

使用这个托管bean:

public class TestBean {
    private String mode = "VIEW";
    public void updateMode(){
        if(mode.equals("VIEW"))
            mode="EDIT";
        else
            mode="VIEW";
    }
    // +getter+setter
}

当第一次呈现页面时,此操作有效。但是它在点击"编辑"按钮后停止工作,ajax通过JSF更新表单。这是怎么造成的,我该如何解决?

这里的问题是,在对新html进行ajax调用后,我们需要再次编译新DOM,如下所示:

$scope.compileHTML = function($el) {
    ($compile($el))($scope);
    $scope.$apply();
};

在这个呼叫之后:

$('#dest').load('replace.html', function() {
    $dest.scope().compileHTML($dest);
});

函数.scope()允许为HTML元素找到正确的AngularJS作用域。它不需要直接指向带有ng控制器的元素,ng控制器下的任何元素都可以使用

相关内容

  • 没有找到相关文章

最新更新