当URL参数更改时,我正在尝试重置控制器中的$示波器变量,但是我在坚持旧值时遇到了一些麻烦。
我有一个我正在为一家律师事务所建立的网站,如果我从任何页面上单击一个律师的BIOS,除了Bio页面本身,它都可以正常工作。但是,如果我尝试单击新律师的生物页面时,当我已经在Bio页面上时,它似乎并没有重置我的$ scope.thisattorney变量,而是创建第二个实例。
问题在于,我有一个带有有关超时功能的当前律师的旋转报价的盒子。因此,当此问题遇到时,它会在该框中旋转两组引号。当我单击第二律师的生物时,我需要忘记第一律师。
这是我认为是相关文件。请问您是否需要看到其他东西。
app.js
var app = angular.module("LKSU", ['ngRoute']);
app.config(function($routeProvider) {
$routeProvider
// route for the home page
.when('/', {
templateUrl: 'content.php',
controller: 'HomeController'
})
.when('/bios/:user_id?', {
controller: 'AttorneyController',
templateUrl: 'bio.php'
})
.otherwise({
redirectTo: '/'
});
});
律师controller.js
app.controller('AttorneyController', ['$scope', '$location', 'attorneys', '$sce', '$routeParams', function($scope, $location, attorneys, $sce, $routeParams) {
$scope.myFunctions = {};
var practiceareas = {
altdispute: "Alternative Dispute Resolution",
businesscorp: "Businesses & Corporations",
estateplanning: "Estate Planning",
futures: "Futures & Derivatives",
litigation: "Litigation",
productliability: "Product Liability",
realestate: "Real Estate",
securities: "Securities"
};
function quoteflip(quotelist, id, total){
clearTimeout(timeoutQuotes);
alert($scope.thisAttorney.name + " 1"); // This is how I know it's holding onto the first attorney in $scope.thisAttorney
var idno = (id + 1) % total;
$("#bio_quotes").html(quotelist[id]);
var src1 = quotelist[idno];
$("#bio_quotes").fadeOut(500, function(){
$("#bio_quotes").html(src1).fadeIn(500);
});
timeoutQuotes = window.setTimeout(function(){quoteflip(quotelist, idno, quotelist.length);}, 5000);
}
var timeoutQuotes = "";
attorneys.success(function(data){
if($routeParams.user_id > 0){
var matches = $.grep(data.attorneys, function(obj) { return obj.id == $routeParams.user_id; });
if (matches.length === 1) {
$scope.thisAttorney = "";
$scope.thisAttorney = matches[0];
$scope.$apply();
var src = $scope.thisAttorney.quotes[0];
$("#bio_quotes").html(src).fadeIn(500);
clearTimeout(timeoutQuotes);
$scope.attorneys = data.attorneys;
$scope.practiceareas = practiceareas;
timeoutQuotes = window.setTimeout(function(){quoteflip($scope.thisAttorney.quotes, 0, $scope.thisAttorney.quotes.length);}, 5000);
}
}else{
$scope.myFunctions.bio_id = 0;
};
});
}]);
想法?
对于记录,我试图将Quoteflip放入主脚本。JS.js,但超时电话找不到它,因此我必须将其带回控制器。如果有人对此有修复,即:看到我的问题,请随时对此发表评论。谢谢。
我建议可以在此处找到Angular的$超时服务文档
您只需要将其作为附加控制器依赖性传递:
app.controller('AttorneyController', ['$scope', '$location', 'attorneys', '$sce', '$routeParams', function($scope, $timeout, $location, attorneys, $sce, $routeParams) { .... }
so
window.setTimeout(function(){quoteflip(quotelist, idno, quotelist.length);}, 5000);
变成
$timeout(function(){quoteflip(quotelist, idno, quotelist.length);}, 5000)
如果您可以提供相关代码的plunk,这也将有所帮助。
您是否尝试过使用$timeout
而不是window.setTimeout
?您可能需要它,因为您的$scope
没有被应用于这项非角度异步服务。
使用$ timeout。它具有自动$ apply build的构建,因此您的值将在屏幕上消化和更新。