angularjs指令2路绑定不起作用

时间:2015-05-17 09:07:14

标签: angularjs angularjs-directive

这是我的指令,它的简单任务是Locale Date String time:

     .directive('localeDateString',['$window', function ($window) {
     return {
         restrict: 'E',
         replace: true,
         scope: {
             time: '='
              },
         template: '<span>{{timeLocal}}</span>',
         link: function ($scope, $element) {
             if ($scope.time != null) {
                 profileDate = new Date($scope.time);
                 var cultureCode = $window.ApiData.CultureCode;
                 $scope.timeLocal = profileDate.toLocaleDateString(cultureCode);
             }
            }
     };

 }])

HTML中的用法:

  <li ng-repeat="note in profile.AccountProfile.Notes" class="noteItem">
      <locale-date-string time="note.Created" ></locale-date-string>
      <span>{{note.UserName}}</span>
      <!-- other stuff .. -->      
  </li>

当我从JSON加载对象“profile”时,一切正常 问题是当我从控制器更改“note.Created”时 - 该指令似乎不起作用(Note的其他成员正在更新确定):

在控制器中:

 DataService.updateProfileRemark(objRemark)
          .then(function (response) {
              // all is ok;  
              var profileIndex = $scope.ProfileList.indexOf(profile);
              var noteIndex = $scope.ProfileList[profileIndex].AccountProfile.Notes.indexOf(note);
              // this is working:
              $scope.ProfileList[profileIndex].AccountProfile.Notes[noteIndex].UserName = objRemark.UserName;
              // this is not:
              $scope.ProfileList[profileIndex].AccountProfile.Notes[noteIndex].Created = Date.now();


          },
          function (errResponse) {
             // handle err
          }
        );

例如,这是“updateProfileRemark”之前的范围:

scope from ng-inspector

之后:

scope from ng-inspector

为什么2路绑定不起作用? 感谢。

1 个答案:

答案 0 :(得分:1)

链接仅执行一次。如果要在$ scope.timeLocal和$ scope.time之间设置双向绑定,请设置$ watch:

link: function ($scope, $element) {
    $scope.$watch('time', function(newTime) {
         if (newTime != null) {
             var profileDate = new Date(newTime);
             var cultureCode = $window.ApiData.CultureCode;
             $scope.timeLocal = profileDate.toLocaleDateString(cultureCode);

         }
    });