双向绑定不适用于角度js

时间:2014-10-09 11:02:02

标签: angularjs

我有这样的HTML代码:

<div ng-controller="MainCtrl">
<tr data-ng-repeat="element in awesomeThings">
      <div ng-if="$even">
          <td ng-click="getServiceDetails(element)">
              <a href="#">
                  {{element['serviceDetail']['name']}}
              </a>
          </td>
      </div>
  </tr>

  //after some html 
  <span >{{publicName}}</span>
</div>

我的控制器看起来像这样:

angular.module('dcWithAngularApp')
  .controller('MainCtrl', function ($scope,$http,test) {
    $scope.awesomeThings = {"serviceDetail":{"name":"batman"}}

    $scope.getServiceDetails = function(serviceDetails)
    {
        console.log('Called')
        $scope.publicName = serviceDetails.name
    }
  });

点击td标记后,span文字没有变化!即使我改变了当前范围内的publicName

我犯错误的地方?

3 个答案:

答案 0 :(得分:1)

您的name $scope.awesomeThings中没有array财产。

我在这里为你添加了一些动物。

angular.module('dcWithAngularApp')
  .controller('MainCtrl', function ($scope,$http,test) {

    $scope.awesomeThings = [
        { name: "Dog" },
        { name: "Cat" }
    ];

    $scope.getServiceDetails = function(serviceDetails)
    {
        console.log('Called')
        $scope.publicName = serviceDetails.name
    }
});

编辑:

我整理了一个解决你的编辑的 JSFiddle

http://jsfiddle.net/HB7LU/7191/

答案 1 :(得分:0)

$ scope.awesomeThings是一个字符串数组,因此元素没有&#39;名称&#39;属性。

你也失踪了;在您的console.log之后,这可能会阻止代码运行。

它可以帮助您记录对象是什么。

<div ng-controller="MainCtrl">
<tr data-ng-repeat="element in awesomeThings">
      <div ng-if="$even">
          <td ng-click="getServiceDetails(element)">
              <a href="#">
                  {{element.name}}
              </a>
          </td>
      </div>
  </tr>

  //after some html 
  <span >{{publicName}}</span>
</div>



angular.module('dcWithAngularApp')
  .controller('MainCtrl', function ($scope,$http,test) {
    $scope.awesomeThings = {"serviceDetail":{"name":"batman"}};

    $scope.getServiceDetails = function(serviceDetails)
    {
        console.log(serviceDetails);
        $scope.publicName = serviceDetails.name;
    }
  });

答案 2 :(得分:-1)

您的主要问题是:

$scope.publicName = serviceDetails.name

需要

$scope.publicName = serviceDetails;

$ scope.awesomeThings是一个字符串数组,而不是对象。您通过字符串数组重复并将字符串传递给getServiceDetails方法,因此&#39; serviceDetails&#39;只是一个字符串。

作为一个无关的警告,我看到你在div中使用了tr。 tr应该在table,thead或tbody中。