2015-05-29 48 views
0

我從一個空的body元素開始,然後動態添加包含ng-controller屬性的HTML。在將html添加到主體後,我想引導Angular應用程序。這適用於角度1.0,但不適用於1.3.8。任何想法爲什麼?手動引導角 - 不使用1.3.8

require(['angular'], function(angular){ 
    'use strict'; 


    buildDom(); 

    function buildDom(){ 
    $('body').append('<div role="tabpanel" ng-controller="WelcomeController"><span>{{greeting}}</span></div>'); 
    } 



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

    app.controller('WelcomeController', function($scope) { 
     $scope.greeting = 'Welcome!'; 
    }); 

    angular.element(document).ready(function() { 
     angular.bootstrap(document, ["demo"]); 
    }); 

}); 

最終結果 - 我看到{{問候}}而不是歡迎!

+0

定義了GroupsService嗎?你在控制檯上看到什麼錯誤? – PSL

+0

什麼不起作用?你看到什麼錯誤?在定義之前調用'buildDom()'是否重要? – Marc

+0

抱歉,GroupsService不在那裏。我將編輯代碼 – nuway

回答

0

引導angularjs和requirejs的正確的做法是這樣的:

'use strict'; 

require.config({  
    baseUrl: 'js/', 
    deps: ['jquery'], 

    paths: { 
     jquery: '../lib/jquery.min', 
     angular: '../lib/angular.min' 
    }, 

    shim: {  
     'angular': { 
      'deps': ['jquery'], 
      'exports': 'angular' 
     } 
    }, 
    priority: [ 
     'angular' 
    ] 

}); 

//https://docs.angularjs.org/guide/bootstrap 
window.name = 'NG_DEFER_BOOTSTRAP!'; 

require([ 
    'angular', 
    'app' 
], function(angular, app) { 
    'use strict'; 
    var $html = angular.element(document.getElementsByTagName('html')[0]); 
    angular.element().ready(function() {     
     angular.resumeBootstrap([app['name']]); 
    }); 
}); 

現在你應該有一個單獨的文件名爲app.js:

define([ 
    'angular', 
    'services', 
    'directives', 
    'controllers' 
    ], function (angular) { 
     'use strict'; 

     return angular.module('myapp', [ 
      'myapp.services', 
      'myapp.directives', 
      'myapp.controllers' 
     ]);  
}); 

那麼你應該對每個文件(服務.js,directives.js和controllers.js)聲明每個角度組件。