2015-04-21 82 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