当前位置: 首页 > 面试题库 >

如何观看使用ng-bind-html创建的ng-model

严景焕
2023-03-14
问题内容

我需要一些使用ng-bind-html创建的ng-model的帮助。我在服务器中有一个JSON文件,其中有一些html和一些类似的输入:

  • .json
    {  
      "test": {
        "1": {
          "question":"<span>1. something:</span>",
          "options":"<input type='radio' name='q1' ng-model='q.1' value='a'>a) op 1<br><input type='radio' name='q1' ng-model='q.1' value='b'>b) op 2<br><input type='radio' name='q1' ng-model='q.1' value='c'>c) op 3<br><input type='radio' name='q1' ng-model='q.1' value='d'>d) op 4<br><input type='radio' name='q1' ng-model='q.1' value='e'>e) op 5<br>",
          "answer":"c"
        },
        "2": {
            ...
        }
      }
    }

然后,在我的HTML文件中,我会看到以下内容:

    <div class="testContent">
            <div class="test">
                <div class="questions" ng-repeat="qs in questions" ng-show="questions.length">
                    <div ng-bind-html="qs.question"></div>
                    <div class="options" ng-bind-html="qs.options">
                    </div>
                </div>
            </div>
            <br>
            <div class="nextBtn">
                <a href="#test/6" class="btn btnNext" ng-click="save()"> continue ></a>
            </div>
        </div>

在我的Angular控制器中,我有一个JSON文件的ajax调用:

控制器:

    .controller('testCtrl', ['$scope', '$http', 'myService', '$sce', 
    function($scope, $http, myService, $sce, ){
        $http.get(urls.url_otis).success(function(data, status){                
                angular.forEach(data.test, function(value, key){                    
                    var q = data.test[key];
                    q[key] = key;
                    q.question = $sce.trustAsHtml(q.question);                    
                    q.options = $sce.trustAsHtml(q.options);

                    $scope.questions.push(q);
                });
        }).error(function(data, status){console.log(status)});
    }

填充了html,但是我不能将$ watch用于通过这种方法生成的模型(q)。

我如何监视以此方式创建的模型的变化?

提前致谢…


问题答案:

您必须编译动态创建的元素,以便角度了解它们。

可以做到这一点的指令可能像这样:

    app.directive('compile',function($compile, $timeout){
        return{
            restrict:'A',
            link: function(scope,elem,attrs){
                $timeout(function(){                
                    $compile(elem.contents())(scope);    
                });
            }        
        };
    });

$timeoutng-bind-html完成其工作后,用于运行编译功能。

现在,您只需将compilediv的属性设置为ng-bind-html

    <div class="questions" ng-repeat="item in questions" ng-show="questions.length" >
       <div ng-bind-html="item.question"></div>
       <div compile class="options" ng-bind-html="item.options"></div>
    </div>

小提琴:http :
//jsfiddle.net/nZ89y/7/



 类似资料:
  • 问题内容: 我想知道ng-bind-html和bind-html-compile指令之间的区别。例如我给 到ng-bind-html,这会剔除bind-html-compile所没有的样式。我可以知道何时应该使用每个指令。谢谢。 问题答案: bind-html-compile 不是标准的Angular指令,它带有模块https://github.com/incuna/angular- bind-h

  • 问题内容: 我想动态创建表单。在控制器内部,我创建了一个字符串 并在我的html页面中 我得到的价值,但没有约束力。我也尝试 也行不通。谁能知道这怎么工作? 问题答案: HTML: 添加指令: JS:

  • 问题内容: 我正在使用angularjs 1.2.0-rc.3。我想将html代码动态地包含到模板中。为此,我在控制器中使用: 在模板中,我得到了: 它适用于常规html代码。但是,当我尝试放置角度模板时,它不会被解释,它仅包含在页面中。例如,我想包括: 非常感谢 问题答案: 此解决方案不使用硬编码模板,您可以编译嵌入在API响应中的Angular表达式。 步骤1. 安装此指令:https : /

  • 问题内容: 我有一些要从json文件加载的html数据。 我通过在应用程序中使用ngSanitize并使用ng-bind-html来显示此html数据。 现在我想从标准转换json blob中的任何链接 至: 。 所以我在json文件上做了一些regExp来转换链接,但是出于某种原因,但是ng-bind-html过滤掉了ng- click的输出,我不知道为什么。是否应该这样做,如果可以,可以禁用此

  • 问题内容: 我正在尝试使用provider和指令来允许我的控制器将HTML注入DIV。 但是,我无法使其正常工作。 我发现这是因为它已从AngularJS中删除(谢谢)。 但是没有,我得到这个错误: http://errors.angularjs.org/undefined/$sce/unsafe 问题答案: 您需要确保已加载sanitize.js。例如,从https://ajax.googlea

  • 问题内容: 我曾经能够用来输出未经消毒的代码(因为消毒发生在服务器端)。 但是现在这个选择消失了吗?我知道我可以使用,但是当不安全易于使用时,将其添加到整个JavaScript上将是一个巨大的痛苦。 我怎么不安全回来? 问题答案: 好吧,仅创建您自己的指令非常简单,这是一个示例。 指令 : 用法 : 演示: http ://jsfiddle.net/cC5VZ/2