Javascript 根据路径在控制器内使用角度变量
我想对两个不同的表使用相同的控制器。唯一的区别是一个变量Javascript 根据路径在控制器内使用角度变量,javascript,angularjs,angularjs-scope,Javascript,Angularjs,Angularjs Scope,我想对两个不同的表使用相同的控制器。唯一的区别是一个变量 if($location.path() == '/type_user') { $scope.varName = 'User'; $scope.pathTo = '/users'; $scope.objName = 'users'; }else if($location.path() == '/type_user_params') { $scope.varName = 'Param';
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 is not a function
这是因为
$scope.objName
是一个字符串在原型中没有push方法
数组的原型()上确实有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;
但它不是推荐的
不管怎样,看起来你想要这样的东西:
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;
这是因为
$scope.objName
是一个字符串在原型中没有push方法
数组的原型()上确实有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;
但它不是推荐的
不管怎样,看起来你想要这样的东西:
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;
如果要将objName用作数组,那么它应该是
$scope.objName=[]代码>
然后可以对数组使用push和pop函数。如果要将objName用作数组,那么它应该是$scope.objName=[]代码>
然后您可以对阵列使用推送和弹出功能。您可以使用解析:
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) { ... }
$routeProvider
它很有用,也可以用来获得ajax承诺。在进入控制器之前,必须执行所有承诺。您可以使用resolve:
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) { ... }
$routeProvider
它很有用,也可以用来获得ajax承诺。在进入控制器之前,必须执行所有承诺。推送是阵列上的一种方法
$scope.objName
是一个字符串。所以你得到了你得到的错误
注意事项:您编写代码的方式很快会让您陷入麻烦。我说的是构建变量的if-else部分 推送是一种基于数组的方法
$scope.objName
是一个字符串。所以你得到了你得到的错误
注意事项:您编写代码的方式很快会让您陷入麻烦。我说的是构建变量的if-else部分 $scope.objName
的值是多少?\是拼接还是切片?拼接与阵列一起使用,其中as切片与字符串一起使用?当我尝试调试您的代码“TypeError:objName.splice不是函数”时出错,$scope.objName
的值是多少?\是splice还是slice?拼接与阵列一起使用,其中as切片与字符串一起使用?我在调试代码时出错“TypeError:objName.splice不是函数”请解释原因@如果是其他部分,则为A。控制器不需要知道这些差异,它只需要使用给定的值执行。你应该让它更通用。这样明天你就不必再添加其他部分了,看看@Beri写的答案。这是一种可能的重用方法,如果值随位置而变化,请解释原因@如果是其他部分,则为A。控制器不需要知道这些差异,它只需要使用给定的值执行。你应该让它更通用。这样明天你就不必再添加其他部分了,看看@Beri写的答案。如果值随位置而变化,这是一种可能的重用方法