【问题标题】:Replace ngView HTML contents dynamically动态替换 ngView HTML 内容
【发布时间】:2016-06-09 20:04:29
【问题描述】:

我有一个带有按钮的 HTML 页面,该按钮会在单击外部服务的请求时触发。此发布请求返回一个 HTML 页面。

是否可以用这个 HTML 内容替换当前的 ngView?

$scope.clickEvent = function() {

  var url = '/external-service';
  var param = { someParameter: someValue };

  $http
    .post(url, param)
    .then(function (data) { // sucess

      // replace ngView with the data contents (which is a HTML)      

    }, function (data) { 
      // error
    });
}

【问题讨论】:

    标签: javascript angularjs angularjs-ng-include ng-view angularjs-ng-route


    【解决方案1】:

    这个StackOverflow Answer 很好地展示了如何通过抓取他们想要添加 HTML 的元素来将元素添加到一些 HTML 中

    var btnhtml = '<button type="button" ng-click="addButton()">Click Me</button>';
    var temp = $compile(btnhtml)($scope);
    angular.element(document.getElementById('foo')).append(temp);
    

    使用angular.element 然后选择元素并选择追加。

    你想要做的更像是删除那里的元素,然后添加你自己的元素。

    所以抓取父节点,然后parentNode.RemoveChild(elementYouWantGone) 然后取同一个父节点,然后执行parentNode.append(variableHoldingHtmlYouWantThere)

    【讨论】:

    • 我重新阅读问题后更改了答案。我的回答非常简单,如果响应中有恶意数据,可能不是很安全。
    • Ty,这似乎很接近。如果我抓住 ngView 节点并替换它的内容,它应该可以按我的意愿工作。我会尝试。如果它有效,我会接受你的回答。谢谢。
    【解决方案2】:

    ngBindHtml 应该可以解决问题,不要忘记将ngSanitize 添加到您的依赖项和$sce.trustAsHtml(value),这样您就不会遇到问题。

    您可以有一个带有ng-bind-html 的 div 并将您的表达式绑定到它。

    记住要小心。恶意代码可能来自响应。

    例子:

    <div ng-app="myApp">
      <div ng-controller="testCtrl">
        <div ng-bind-html="myNewHtml"></div>
      </div>
    </div>
    
    $scope.clickEvent = function() {
    
        var url = '/external-service';
        var param = { someParameter: someValue };
    
        $http
            .post(url, param)
            .then(function(data) { // sucess
                $scope.myNewHtml = $sce.trustAsHtml(data.yourHtmlObject);
                // replace ngView with the data contents (which is a HTML)      
    
            }, function(data) {
                // error
            });
    };
    

    codepen 示例并没有抓取 http 响应,但你可以实现它。

    Codepen:http://codepen.io/anon/pen/KzKPNp

    【讨论】:

    • Ty,但这并不是我所需要的,因为它不会删除 ngView 的内容。
    • 您可以在视图中添加div.. 作为全局div
    猜你喜欢
    • 1970-01-01
    • 2021-10-31
    • 1970-01-01
    • 1970-01-01
    • 2022-01-01
    • 1970-01-01
    • 2012-11-02
    相关资源
    最近更新 更多