我有一个像这样的控制器,
type
移动时效果很好,
(function () {
'use strict';
angular.module('myControlleringApp').controller("myController", ['$rootScope', myController]);
function myController($rootScope) {
$rootScope.status = "loading";
$("#myIFrame").attr('src', "Templates/myControllerViewer.aspx");
$('#myIFrame').load(function ($rootScope) {
// some other logic
$rootScope.status = "loaded";
});
};
})();
超出$rootScope.status = "loaded";
方法。但除此之外它并没有改变我的观点。
以下是一些HTML
load
答案 0 :(得分:1)
load
回调中的$ rootScope参数屏蔽了您注入控制器的那个参数:
$('#myIFrame').load(function ($rootScope) { // Creates new variable in
// the callback's scope!
$rootScope.status = "loaded"; // This is now referring to the callback's
// parameter, not the service.
});
所以你实际做的是:
$rootScope.status = "loading";
$('#myIFrame').load(function (randomNewParam) {
randomNewParam.status = "loaded"; // Not $rootScope!
});
看起来您可能希望$rootScope
注入load
回调 - 事实并非如此! According to the jQuery docs,回调应采用以下形式:
$('#myIFrame').load(function (event) {
$rootScope.status = "loaded";
});
请注意,现在参数名称已更改,真实的$rootScope
可再次从控制器功能的范围中获得 - 这将为您提供所需的功能!也就是说,正如Dhaval Marthak在评论中提到的,你真的不应该使用$rootScope
来传递应用程序周围的值 - 它实际上与创建全局变量相同。服务和依赖注入是可行的方法。