2015-05-06 91 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