2015-10-07 24 views
0

我正在編寫一個小型的Angular應用程序,它依賴於應用程序外部定義的一些常用功能來跨不同控制器執行任務。在我的一個控制器中,範圍對象在控制器加載時被聲明。我希望能夠稍後在我的幫助函數中分配它,但分配不起作用。在角度應用程序之外分配範圍對象

下面是相關代碼:

.controller('myCtrl', function($scope, myFactory){ 

    $scope.myObj; 

    $scope.saveEntry = function() { 
     myFactory.saveEntry($scope.obj); 
     formatSingleTableEntry($scope.obj, $scope.myObj); 
     $scope.obj = {}; 
    } 

    }); 

    // Entry Formatter 
    function formatSingleTableEntry(entry, scopeObject) { 
     if (typeof scopeObject === 'undefined') { 
     scopeObject = []; 
     } 
     if (typeof entry.obsDt === 'string') { 
      entry.obsDt = dateFormat(entry.obsDt); 
     } 
     scopeObject.push(entry); 
    } 

    // Date Formatter 
    function dateFormat(date) { 
     date = date.split(''); 
     date[10] = 'T'; 
     date = date.join(''); 
     return Date.parse(date); 
    } 

如果我指定的範圍對象在控制器空數組,一切正常,但是分配不會在此配置。我可以查看實際發生在輔助函數中的任務,但是當我檢入控制器時,它沒有。

爲什麼?

+0

方式的代碼目前的功能是中保存的會造成助手功能給scopeObject變量分配作爲數組的第一個條目的任何引用,然後按下條目。我可以檢查,它工作正常,然後當我回到控制器時,即使在賦值和推送之後,scopeObject仍然未定義。 –

+0

解釋'回來'更詳細....每個使用是一個新的實例。如果您需要會話持久性數據需要存儲在服務中 – charlietfl

+0

只需執行console.logs,在代碼的不同點檢查對象的類型。這回來了。 –

回答

1

一個主要問題是undefined $scope.myObj;是原始的。傳遞時,作爲自變量的功能沒有參考回到原來的可變

var foo; 

function test(myVar){ 
    myVar = 'Some string'; 
    // myVar != foo 
} 

test(foo); 
console.log(foo)// undefined 

如果原始變量是一個數組或對象傳遞參考該數組或對象,因此可以操縱它。

總之,只是聲明$scope.myObj =[];,不重新分配,並打破創建

+0

我想避免返回數組,每次添加條目時都會重新分配,但基本上這是使用此輔助函數的唯一方法?控制器內的那個或分配? –

+0

只是讓它成爲空陣列,並且不會通過重新分配來破壞參考 – charlietfl

+0

對,我很迷戀。我使用ng-show來隱藏此數組將填充的表,直到數組中有數據。空陣列是真的,所以桌子上顯示,這就是爲什麼我想延遲分配的原因。我可以使用myObj [0]來隱藏表格,直到有一個實際的條目,但就像我說的我迷戀。我可能會這樣做......謝謝! –

相關問題