动态引入的Angular控制器的数据绑定

时间:2014-12-27 13:40:50

标签: javascript jquery angularjs

我是一个有角度的初学者&试图在遗留应用程序中引入角度。页面结构如下所示

<html ng-app="demoApp">
    <div class="static-parent">
        <div class="dyanamic" ng-controller="SimpleController">
            <ul>
                <li ng-repeat="cust in customers">
                   {{cust.name}} - {{cust.city}}
                </li>
            </ul>
        </div>
    </div>
</html>

单击某个按钮时,“dyanamic”div将添加到dom中。

当动态添加此控制器div时,我尝试通过调用angular bootstrap来加载角度     

angular.bootstrap(document,['demoApp']);

运行上述声明后,

  1. 在dom中创建了3个Li元素

  2. 但没有看到数据 在网页上。 Li元素是空的

  3. >> angular.element(".dynamic").scope().customers;
    按预期返回3个客户对象。

    >> angular.element(".dynamic").scope().$apply();
    也没有帮助。

    你能告诉我哪里出错吗?在stackoverflow上尝试了其他答案,但似乎没有帮助。

    控制器代码:

        //setting up controller
        var demoApp = angular.module("demoApp", []);
        var controllers = {};
        controllers.SimpleController = function($scope){
            $scope.customers = [{name:'dave', city:'auckland'},{name:'abe', city:'City2'}, {name:'ram', city:'City3'}];
        };
        demoApp.controller(controllers);
    

    动态添加div的代码:

    var template = Handlebars.compile( $("#template-content-content-container").html() );
    $("static-parent").html(template(data));
    angular.bootstrap('.page .row', ['demoApp']);
    

    Angular版本:1.0.6

    在1.2.28上,调用angular.bootstrap(document,['demoApp'])或angular.bootstrap('。dynamic',['demoApp']);`

    正在给予

    错误:错误:btstrpd 应用程序已经使用此元素进行自举

    以下是浏览器屏幕截图 -

    enter image description here

1 个答案:

答案 0 :(得分:0)

请检查第三个(已接受的)答案:Angular bootstrapping after load of html (直接链接:Loading an AngularJS controller dynamically

我认为,你必须&#34;编译&#34;任何东西,都是在第一个&#39; bootstrap&#39;之后添加的。调用

另外,我昨天做了这个小提琴来描述我的麻烦,我觉得它适合你。

http://jsfiddle.net/21neg0ox/

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

angular.element(document).ready(function () {
    angular.bootstrap(document, ['app']);
});

//c1
app.controller('c1', ['$scope', '$compile', c1Fn]);
app.controller('c2', ['$scope', '$compile', c1Fn]);

function c1Fn($scope){
    $scope.isAlive = 'is alive';
}
setTimeout(wtf, 500);

function wtf(){
    var myLovelyHTML = '<div ng-controller="c2">c2 {{isAlive}}</div>';

    document.getElementById('c2-wrap').innerHTML = myLovelyHTML;    
}