AngularJS:如何初始化$ scope属性

时间:2016-11-11 19:22:11

标签: angularjs

我写了以下小角度代码片段:

html文件:

<body ng-controller="myCtrl">
    <div class="container">
      ....
    </div>
</body>

javascript文件:

app.controller('myCtrl', function($scope) {
  $scope.white_sld = get_init_white_sld();
  $scope.get_soldier_style = function is_soldier(loc) {

  var sld_color = get_soldier_color(loc);
  if (sld_color == "") {
      return ""; // no soldier in this square
  } else {
      return {
          'width': '80%', 'height': '80%', 'border-radius': '80%', 'background-color': sld_color,
          'margin': 'auto auto', 'vertical-align': 'middle'
      }
  }

  function get_soldier_color(loc) {
      for (var i = 0; i < white_sld.length; i++) {
          if ((loc[0] == white_sld[i][0]) && (loc[1] == white_sld[i][1])) {
              return "white"
          }
      }
      for (var i = 0; i < black_sld.length; i++) {
          if ((loc[0] == black_sld[i][0]) && (loc[1] == black_sld[i][1])) {
              return "black"
          }
      }
      return ""; // no soldier found
  }
 }
});

function get_init_sld_line(x_loc, y_loc, color) {
    var line_sld = [];
    for (var i = 0; i < 4; i++) {
        line_sld.push(new Soldier(x_loc + 2 * i, y_loc, color));
    }
    return line_sld;
}


function get_init_white_sld() {
    var init_white_sld = [];
    init_white_sld.push(get_init_sld_line(0, 0, "white"));
    init_white_sld.push(get_init_sld_line(1, 1, "white"));
    init_white_sld.push(get_init_sld_line(0, 2, "white"));
    return init_white_sld;
};

我对此代码的问题是在“$ scope.white_sld = get_init_white_sld();”之后,$ scope.white_sld获取函数get_init_white_sld()的返回值。但是,当它进入函数'is_soldier'时,$ scope.white_sld变为未定义。我的问题是为什么以及如何解决它?

2 个答案:

答案 0 :(得分:1)

那是因为您应该在该功能中使用$scope.white_sld,而不仅仅是white_sld

答案 1 :(得分:0)

我已更新了plunkr,请检查

实际上你忘了在get_init_sld_line函数中添加return语句。

https://plnkr.co/edit/kYebs1pFznaDpHlFDodK?p=preview

return line_sld;