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

ale*_*hro 4 jquery angularjs

这是我的代码:

HTML:

<div id="container" ng-controller="MyCtrl">    {{model.name}}   </div>
Run Code Online (Sandbox Code Playgroud)

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');
};
Run Code Online (Sandbox Code Playgroud)

这是一个显示行为的小提琴

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

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


更新:丑陋的解决方法:

在打电话再次$compile申请模型之后:

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

Mar*_*cok 5

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]);
});
Run Code Online (Sandbox Code Playgroud)

小提琴

scope.$apply()需要,但我不知道为什么.希望其他人可以向我们解释.