jQuery   发布时间:2022-03-30  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了jquery – $compile(html)(范围)忽略我手动创建的范围大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
这是我的代码

HTML

<div id="container" ng-controller="MyCtrl">    {{model.namE}}   </div>

JavaScript的:

var app=angular.module('myApp',[]);

var $injector =angular.injector(['ng']); 
$injector.invoke(function($compile,$rootScopE) {
    var html = '<div ng-controller="MyCtrl1">{{model.namE}}</div>'

    var scope = $rootScope.$new();

    scope.model = {name:'MyCtrl1'};
    //alert(scope.model.Name);
    var e3 = $compile(html)(scopE);

    $('#container').append(e3[0]);
});

function MyCtrl($scopE) {
    $scope.model={};
    $scope.model.name = 'MyCtrl';

};
function MyCtrl1($scopE) {   
    //alert('MyCtrl1');
};

Here is a fiddle showing the behavior

如你所见,它呈现两个’MyCtrl’字符串.即angular忽略我手动创建的范围对象.

问题是:如何使$compile使用我创建的范围?

更新:丑陋的解决方法

调用$compile之后再次应用模型:

angular.element(e3[0]).scope().$apply(function(scopE) {
    scope.model = {name:'MyCtrl1'};
});

解决方法

ng-app创建一个注入器,然后你创建另一个注入器.这可能不是你想要的.我将大部分代码移动到一个 run()方法中,该方法有$compile服务和$rootScope注入:

app.run(function($compile,$rootScopE) {
    var html = '<div ng-controller="MyCtrl1">{{model.namE}}</div>'

    var scope = $rootScope.$new();

    scope.model = {name:'MyCtrl1'};
    //alert(scope.model.Name);
    var e3 = $compile(html)(scopE);
    scope.$apply();

    $('#container').append(e3[0]);
});

Fiddle

范围.需要$apply(),但我不确定原因.希望其他人可以向我们解释.

大佬总结

以上是大佬教程为你收集整理的jquery – $compile(html)(范围)忽略我手动创建的范围全部内容,希望文章能够帮你解决jquery – $compile(html)(范围)忽略我手动创建的范围所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。