gpt4 book ai didi

jquery - $compile(html)(scope) 忽略我手动创建的范围

转载 作者:行者123 更新时间:2023-12-01 00:10:51 24 4
gpt4 key购买 nike

这是我的代码:

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”字符串。 IE。 Angular 忽略我手动创建的范围对象。

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

<小时/>

更新:丑陋的解决方法:

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

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

最佳答案

ng-app 创建一个注入(inject)器,然后您正在创建另一个注入(inject)器。这可能不是您想要的。我将您的大部分代码移至 run()方法,其中注入(inject)了 $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

需要

scope.$apply() ,但我不确定为什么。希望其他人可以向我们解释这一点。

关于jquery - $compile(html)(scope) 忽略我手动创建的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15225141/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com