2015-05-06 122 views
1

嗨,大家好,我需要了解在ngRoute加載templateURL之後,我能做些什麼來加載腳本。 我需要實例兩個滑塊後,該頁面加載templateUrl文件的HTML。tempateURL加載腳本

我使用angularJs和ngRoute。我認爲控制器是在HTML完成加載模板文件之前執行的。

我有這樣的代碼:

app.config(function($routeProvider){ 
//set route 
    $routeProvider 
    .when('/', { 
     templateUrl: 'page/configurator.html', 
     controller: 'mainController'   
    }) 
    .otherwise({ 
     redirectTo:'/' 
    }) 
}); 
app.controller('mainController', function($scope){ 
    //data for main=configurator controller  
    //$scope.message="Everyone come and see how good I look! i am in MAIN=configurator page"; 
    $scope.pageTitle="SELECT THE ICE TYPES AND MAX DAILY PRODUCTS";  
    alert("test"); 
    $(window).trigger("resize");  
});  

我能爲運行腳本後做HTML是插入在我的網頁?

感謝 VR

回答

2

的鏈接後功能是指令的渲染週期的最後階段,它也被從最裏面的元素調用最外層。所以你可以在頂層元素上使用這個來檢測angular何時呈現所有子指令(ng和否)。

app.directive('onFinishRender', function ($timeout,$rootScope) { 
    return { 
     restrict: 'A', 
     link: function (scope, element, attr) { 
      $timeout(function() { 
       $rootScope.$broadcast("hasFinishedRender"); 
      }); 
     } 
    } 
}) 


app.controller('mainController', function($scope){ 
    $scope.$on('hasFinishedRender',function(){ 
     // load script dynamically using any method 
     var my_awesome_script = document.createElement('script'); 
     my_awesome_script.setAttribute('src','http://example.com/site.js'); 
     document.head.appendChild(my_awesome_script); 
    }); 
}); 

您可能還需要一些邏輯來防止它在未來的摘要循環上多次發射。另外假設角度1.x

+0

感謝您的回覆,我嘗試將此指令

作爲第一個元素(我的應用程序ng-app在html標籤中),但沒有任何內容。 我認爲該指令調用onFinishRender,該事件hasFinishedRender與。$ brodcast方法,它是正確的? – Valix85

+0

如果我在主控制器上插入一個警報,它顯示兩次,爲什麼? 在我的案例腳本它被加載了兩次,第一次循環產生一個錯誤,並在第二次循環它沒事,但我有兩個滑塊...我能做什麼? – Valix85

+0

正確,我呼叫控制器在路由器和頁面中,現在我只呼籲控制器在HTML頁面 – Valix85