似乎无法重置 AngularJS 中的$scope变量



当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的构建,因此您的值将在屏幕上消化和更新。

相关内容

  • 没有找到相关文章

最新更新