在Angular

时间:2015-11-21 03:19:01

标签: javascript html angularjs angularjs-scope ionic-framework

我使用Ionic框架将在线词典转换为移动应用程序,并且我遇到了一些问题。我不会详细了解网站的工作原理,但是对于搜索功能,它会在客户端JSON文件上执行近似搜索,然后将最近的10个条目注入到以下HTML模板中:

"\n<div class='matchContainer'">    <span class=\"matchLeftDiv\">${display_form}<\/span>  \n    <span class=\"matchRightDiv\">${definition}<\/span>  \n    <span style=\"display:block;clear:both;\"> <\/span>\n<\/a><\/div>\n\n\n"

最终会在#results div中显示的内容。在网站上有一个锚元素,当点击它时,导航用户到一个更详细的页面,关于他们点击的单词。对于应用程序,我希望单击该单词以触发具有相同信息的模态,因此我通过添加ng-click =&#34; openModal()&#34;来更改模板。像这样:

"\n<div class='matchContainer' ng-click=\"openModal()\">    <span class=\"matchLeftDiv\">${display_form}<\/span>  \n    <span class=\"matchRightDiv\">${definition}<\/span>  \n    <span style=\"display:block;clear:both;\"> <\/span>\n<\/a><\/div>\n\n\n"

但是,当结果插入#results div时,ng-click没有触发。所以我在这里查看了Stack Overflow,查看了Angular上的团队树屋课程以及codecademy课程,拼凑起来我需要编译HTML然后追加它。所以我写了以下函数:

$scope.compileHTML = function() {
        var compiledHTML = $compile($("#results"))($scope);
        $("#results").append(compiledHTML);
    };

然后我在我处理搜索的函数中调用它:

$scope.getResult = function(searchWord) {
        if ( $(".input").val() === "") {
            $("#results").hide();
        } else if ( $(".input").attr('id') === "engSearch") {
            dataTyped(searchWord, engSearch);
        } else if ( $(".input").attr('id') === "gitSearch") {
            dataTyped(searchWord, gitSearch);
        } 
        $scope.compileHTML();
    };

结果很奇怪。基本上,它只在某些时候有效。有趣的是,当我基本上使用浏览页面做同样的事情时,它起作用了!这是我的浏览条目编译器的代码。

$scope.compileBrowseHTML = function() {
        var compiledHTML = $compile($("#browseEntries"))($scope);
        $("#browseEntries").append(compiledHTML);
    };

$scope.next10 = function () {
        startIndex += 10;
        tenEntries = get10(entries, startIndex);   
       $("#browseEntries").html(tenEntries.join(""));
        $scope.compileBrowseHTML();
    };

这是我第一篇关于堆栈溢出的帖子,我是一名词典编纂者,只是在八月开始编码,所以请保持温和!而且清楚!如果我可以添加任何内容以使此帖更清楚,请告诉我。

谢谢,

1 个答案:

答案 0 :(得分:3)

您应该为此使用ng-repeat和数据绑定,或过滤器,而不是模板编译。

您执行此任务的方式不是&#34;棱角分明的方式&#34;。您不应该从控制器操作DOM。

查看这些链接link link2