2016-09-24 4 views
0

У меня есть тот же объект options в $ scope, и я хочу использовать его более одного раза. Как я могу различать объекты с тем же именем? Это происходит в угловом.

$scope.options = { 
      chart: { 
       type: 'Chart1', 
       height: 450, 
       width:600 
      } 
     }; 
$scope.options = { 
      chart: { 
       type: 'Chart2', 
       height: 400, 
       width:100 
      } 
     }; 

HTML

<myOptions=**"options"**></myOptions> 

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

ответ

2

Там нет причин, чтобы использовать тот же $ scope.name для опций. Я предлагаю вам использовать $ scope.optionsOne и $ scope.optionsTwo. В противном случае, второй $ scope.options перекрывает первые $ scope.options и вы остались только:

$ scope.options = { диаграммы: { типа: 'chart2', высоты: 400, ширина: 100 } };

Удачи вам!

+0

Да, это точно проблема, извините, я не был более ясен. – cdb

+0

Хорошо, так что поставьте этот зеленый V рядом с ответом, чтобы другие пользователи, просматривающие это сообщение, прочитали правильный ответ :) –

0

Хотя я не уверен, что из контекста (один объект должен перекрывать друг друга), если вы сохраняете объекты в переменных, то вы можете использовать строгий оператор сравнения:

var opt1 = $scope.options; 

//after a possible change in value 
if(opt1 === $scope.options) doStuff(opt1); //note strict comparison 
else doStuff($scope.options) 

В противном случае, если вы знаете, что ключ [тип] вы ищете, вы можете проверить, что:

if($scope.options[type] == 'chart1') doStuff($scope.options); 
+0

Кажется, что это сработает, я знаю ключ. Я правильно отформатировал это? Я не был уверен, что поставить, где у вас есть «doStuff», поскольку все, что я хочу сделать, это передать параметры if ($ scope.options [type] == 'sunburstChart') $ scope.options = { chart: { высота: 450, ширина: 600, цвет: d3.scale.category20c(), продолжительность: 250 } }; – cdb

2

Как мне известно, второй объект «options» переопределяет первый. Было бы лучше использовать функцию конструктора, а не литерал объекта. Объявить функцию и инициализировать значение с помощью параметров. Например:

$scope.options = { 
      myChart: function(param1,param2,param3) { 
       type = param1; 
       height = param2; 
       width = param3; 
      } 
     }; 

$scope.options.myChart(val1,val2,val3); 

Могут быть лучшие решения. Пожалуйста, кто-то поправьте меня, если я ошибаюсь.

+0

Это формат, который я думал, будет работать - и, возможно, он все равно будет. Интересно, верно ли мое fomatting? Я показываю, что это строка или число в последней строке? $ Scope.options = { диаграммы: {функция (param1, param2, param3, param4, param5) { типа = param1, высоты = param2, ширины = param3, цвета = param4, длительности = param5 } }; – cdb

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