2015-04-21 84 views
0

我想FO兩個不同tables..only差是一個變量,以用同一個控制器..使用內部控制器角度變量取決於路徑

if($location.path() == '/type_user') 
{ 
    $scope.varName = 'User'; 
    $scope.pathTo = '/users'; 
    $scope.objName = 'users'; 

}else if($location.path() == '/type_user_params') 
{ 
    $scope.varName = 'Param'; 
    $scope.pathTo = '/params'; 
    $scope.objName = 'params'; 

} 

,然後用它在一個函數,如下所示:

$scope.objName.splice($scope.objName .indexOf(xxx),1); 

或:

$scope.objName.push($scope.inserted); 

但我正在逐漸

$scope.objName.push is not a function 
+0

'$ scope.objName'的值是什麼???? \ –

+2

是拼接還是切片? 拼接與數組一起使用,而切片與字符串一起使用? 當我嘗試調試代碼時出現錯誤「TypeError:objName.splice不是函數」 – Anand

回答

3

那是因爲$scope.objName是一個字符串不是在它的原型中有推式方法。

一個數組在其原型上有推式方法(Array.prototype.push)。

您可以通過使用像這樣的代碼添加您自己的實現爲一個字符串:

String.prototype.push = function(str) 
{ 
    return this + str; 
} 

var a = 'abc'; 
var b = a.push('de'); 
console.log(b); // abcde 

但它建議。

反正它看起來像你想是這樣的:

var last = $location.path().split('_').pop(); 
$scope.varName = last.substr(0, 1).toUpperCase() + last.substr(1); 
$scope.pathTo = '/' + last; 
$scope.objName = last; 
3

,如果你想使用OBJNAME作爲數組那麼它應該是$scope.objName = [];

那麼你可以使用push和pop功能的陣列。

0

您可以使用解析:

when(
url:'/type_user', 
controller: MyController, 
resolve: { 
    varName : 'User', 
    pathTo : '/users', 
    objName : 'users', 
} 
) 

when(
url:'/type_user_params', 
controller: MyController, 
resolve: { 
    varName : 'Param', 
    pathTo : '/params', 
    objName : 'params', 
} 
) 

然後你可以將它們注入你的控制器內:

function($scope, varName,pathTo,objName) { ... } 

https://docs.angularjs.org/api/ngRoute/provider/ $ routeProvider

它是有用的,也爲越來越AJAX的承諾。所有的承諾必須在進入控制器之前執行。

0

Push是一個數組上的方法。

$scope.objName是一個字符串。所以你會得到你得到的錯誤。

謹慎的言辭:你寫代碼的方式很快會給你帶來麻煩。我在談論如果構建變量的其他部分。

+0

請解釋原因。 @Anand – devilbone

+0

由於其他部分。控制器不需要知道這些差異,只需要執行給定的值即可。你應該使它更通用。所以明天你不必再添加其他部分 – Anand

+0

看看@Beri寫的答案。如果值根據位置而變化,則這是重用的一種可能方式 – Anand