2015-06-19 156 views
0

這裏是我的問題中延伸控制器:我想運行controllerB的代碼到controllerA。問題是,當變量返回給controllerA時,請求中的值永遠不會返回。這裏有一個plunker顯示問題:http://plnkr.co/edit/GqC9BOKTi8HxQLf2a2yd?p=previewAngularJS控制器

var test = $scope.$new(); 
$controller('Ctrl1', {$scope : test}); 

//the first 2 lines are executed, but the 3d never returns a value 
$scope.variable = test.variable; 
$scope.varFromFunction = test.varFromFunction(); 
$scope.varFromRequest = test.varFromRequest; 

第2行中執行,但3D一個從來沒有返回一個值。

+0

使用服務在控制器之間進行通信或共享代碼,例如http://jsfiddle.net/simpulton/xqdxg/。我不確定$控制器是否用於應用程序,可能僅用於測試。 – martinczerwi

+0

這可能是危險和誤導。在你的plunker中你有兩個'Ctrl1'的實例。如果它是爲了在兩個控制器之間共享信息,那麼這將不起作用。對於這種情況,最好使用_service_。 – Michael

回答

0

由於varFromRequest位於與500毫秒在第一控制器中的$超時方法內,將執行後500S與此同時角度完成其鏈接階段。

在第二控制器觀看varFromRequest是簡單的解決方案

test.$watch('varFromRequest', function(new_value, old){ 
    $scope.varFromRequest = test.varFromRequest; 

}) 

這裏是更新plunker http://plnkr.co/edit/TqSjeckrdqeKquEbCwFX

0

varFromFunction未定義當第二控制器試圖得到一個參考。超時在此請求後設置此var。如果您延遲參考請求,則會得到適當的值。這不是推薦的工作方式,但它確實回答了您爲什麼尚未設置的問題。

myApp.controller('Ctrl1', ['$scope', '$timeout', function($scope, $timeout) { 
    $scope.variable = 'OH HAI'; 
    $scope.varFromFunction = function(){ 
     return "OH HAI FromFunction"; 
    } 
    $timeout(function(){ 
     $scope.varFromRequest = "time"; 
    },500); 

}]); 

myApp.controller('Ctrl2', ['$scope', '$controller', '$timeout', function($scope, $controller, $timeout) { 
    var test = $scope.$new(); 
    $controller('Ctrl1', {$scope : test}); 

    $scope.variable = test.variable; 
    $scope.varFromFunction = test.varFromFunction(); 
    $scope.varFromRequest = test.varFromRequest || 'unset'; 

    $timeout(function(){ 
     $scope.varFromRequest = test.varFromRequest || 'still unset'; 
    },500); 
}]);