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

jQuery调用在Angular的$ viewContentLoaded中不起作用

符风畔
2023-03-14
问题内容

无法在Angular控制器的$ viewContentLoaded事件中调用jquery函数,以下是相同的代码。

$scope.$on('$viewContentLoaded', function() {
    jQuery.growlUI('Growl Notification', 'Saved Succesfully');
    jQuery('#category').tree()
    });

这里需要任何配置吗?我什至尝试了noConflict(); var $ jq = jQuery.noConflict(); 是否需要其他配置?

谢谢阿卜杜勒


问题答案:

首先,不要从控制器进行DOM操作。而是从指令执行。

您可以在指令链接方法中执行相同的操作。您可以访问element在其上应用了指令。

确保在angularjs脚本之前加载jquery,然后在grawlUI,三个,angularJS和最后是应用程序脚本之前加载jquery。以下是指令示例

var app = angular.module("someModule", []);

app.directive("myDirective", function () {
    return function (scope, element, attrs) {

        $.growlUI('Growl Notification', 'Saved Succesfully');
        element.tree();
    };

});

angularjs已内置jQuery
lite。如果在angular之后加载完整的jquery,则由于已经定义了jQuery,因此完整的jquery脚本将跳过执行。

==发表评论后更新==

我在评论后再次查看了您的问题,并意识到通过ajax加载的内容会在您的角度视图中追加到某个div。然后,您想将element.tree()jQuery插件应用于该内容。不幸的是,上面的示例不起作用,因为它是在链接上触发的,该链接是在ajax响应中的内容通过我向您显示的指令附加到元素之前发生的。但是不用担心,有一种方法:)尽管它既快速又肮脏,但是仅用于演示。

假设这是您的控制器

function ContentCtrl($scope, $http){
  $scope.trees=[];

  $scope.submitSomethingToServer=function(something){
     $http.post("/article/1.html", something)
          .success(function(response,status){
               // don't forget to set correct order of jquery, angular javascript lib load
               $.growlUI('Growl Notification', 'Saved Succesfully');

               $scope.trees.push(response); // append response, I hope it is HTML
     });
  }

}

现在,指令位于控制器范围内(它与控制器使用相同的范围)

var app = angular.module("someModule", []);

app.directive("myDirective", function () {
    return function (scope, element, attrs) {

        scope.$watch("trees", function(){
            var newParagraph=$("<p>" + scope.trees[scope.trees.length-1] + "</p>" ); // I hope this is ul>li>ul>li...or what ever you want to make as tree
            element.append(newParagraph); 
            newParagraph.tree(); //it will apply tree plugin after content is appended to DOM in view
        }); 
    };

});

第二种方法是在ajax完成并且从服务器获取内容后,从控制器进行$ broadcast或$
emit事件(取决于指令在控制器的外部,在控制器的范围内)。然后,应该将指令订阅此事件,并通过接收传递的数据(data =
content作为字符串)来处理该指令,并按照上面的说明进行其余操作。

问题是,威胁将来自ajax的内容作为数据一直传递到指令,然后将其注入到要呈现它的元素中并将树插件应用于该内容。



 类似资料:
  • 问题内容: 我有一个Ajax脚本,可以将一些数据发送到外部URL。外部URL托管在同一服务器上,但是域与ajax调用的源不同。 这在Firefox和Chrome中完美运行。但是,在IE中,ajax调用不会通过,并且Return False函数也不起作用(一旦ajax调用失败)。 下面是我的代码: 当我尝试从ajax网址中删除http://时,返回false确实有效。 任何帮助,将不胜感激。谢谢 问

  • 问题内容: 我制作了一个Jquery函数,该函数(目前)会动态调用该函数,并显示警告。与Firefox,铬:它的作品!当我尝试IE7(第一次)时,它失败了。如果我重新加载页面(F5)并重试,则可以!o_O 我终于明白为什么会这样。在我的旧网站中,我使用了jquery-1.3.2.min.js库。在此我使用jquery-1.4.2.js,实际上它不起作用。那么这是什么一回事?这个新版本中有错误吗?

  • 我尝试创建一个jQuery函数.hover来通过使用另一个类并使用hover来修改div的背景颜色,方法是将hover用于addClass和removeClass。 HTML: CSS: JavaScript:

  • 我试图通过AngularJS使用返回JSON的$http.post进行Web2.0 API调用,尽管这听起来很奇怪,但它在一个小时前工作过,现在不工作了,而且我没有做任何改变。该应用程序在所有其他浏览器中继续工作,只是在Edge中失败了。 编辑:忘了提到-当Fiddler打开并捕获流量时,应用程序可以工作。那是最奇怪的部分。

  • 问题内容: 我有一个问题: 虽然我从另一个带有ajax的页面调用内联脚本(也使用jQuery),但似乎不再定义jQuery(?),并且我无法使用任何jQuery函数,应该使用(根据内联脚本)。 它基本上是新闻列表,其中包含指向特定新闻项目的链接。我现在更喜欢使用内联脚本,因为在其他地方不需要此功能。 如您所见,我只是在调用另一个页面的一部分并将其内容附加到页面上。 当我加载整个页面(不是页面的一部

  • 问题内容: 我有这个功能: 我的页面使用最喜欢的按钮加载内容,但是在Ajax调用并生成其他新内容后,单击新内容的按钮时该功能不起作用。有什么不对吗? 问题答案: 那是因为您正在使用动态内容。 您需要将点击调用更改为委托方法,例如 要么