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

Это сплайсинг или срез? splice используется с массивом, где в качестве среза используется строка? Я получаю сообщение об ошибке при попытке отладки кода «TypeError: objName.splice не является функцией» – Anand

ответ

3

Это потому, что $scope.objName является строкой не есть метод толчка в его прототипе.

У массива есть метод push на его прототипе (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 = [];

, то вы можете использовать толчок и поп-функции для массив.

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

Это полезно, а также для получения АЯКС обещаний. Все обещания должны быть выполнены до входа в контроллер.

0

Push - это метод массива.

$scope.objName - это строка. Таким образом, вы получаете ошибку, которую получаете.

Осторожно: способ, которым вы написали код, скоро приземлит вас на неприятности. Я говорю о том, нужна ли еще часть для построения переменной.

+0

, пожалуйста, объясните, почему. @Anand – devilbone

+0

из-за если еще часть. Контролеру не нужно знать об этих различиях, просто нужно выполнить заданное значение. Вы должны сделать его более общим. Так что завтра вам не придется добавлять еще одну часть. – Anand

+0

Посмотрите на ответ, написанный @Beri.Это один из возможных способов повторного использования, если значения изменяются в зависимости от местоположения – Anand

Смежные вопросы