2016-01-13 68 views
1

即使模型得到更新,视图也不会更新。我搜索了这个问题,我得到了一些解决方案,即使用setTimeout$timeout函数。 我试过上面的函数,但即使使用$超时函数模型得到更新和查看不是。

我是从一个服务设置模型的价值。当一个控制器在服务中设置值时,另一个控制器监听该服务并更新其模型。

注工厂服务

function loadNoteFactory($http) { 
    var baseURL = "SOME_URL"; 
    var sessionId = "sessionId"; 

    return { 
     getNotes: function() { 
      return $http.get(baseURL+"notes?"+sessionId); 
     }, 
     addNote: function(note) { 
      return $http.post(baseURL+"note?"+sessionId, note); 
     }, 
     editNote: function(tag, tagname) { 
      return $http.put(baseURL +"note/"+ note.id+"?"+sessionId, note); 
     }, 
     deleteTag: function(tagId) { 
      return $http.delete(baseURL +"note/"+ note.id+"?"+sessionId); 
     } 
     }; 
} 

厂服务

function loadSelectedNoteFactory($rootScope){ 

    var selectedNoteFactory = {}; 

    selectedNoteFactory.note = {}; 

    selectedNoteFactory.setCurrentNote = function(note) { 
     this.note = note; 
     $rootScope.$broadcast('noteChanged'); 
    }; 

    return selectedNoteFactory; 
} 

位指示1 - 服务设置新的价值

function loadNoteListControllar($scope, NoteFactory, tagBasedNoteSearchService, selectedNoteFactory){ 

     getUsersNotes();  

     function getUsersNotes(){ 
      NoteFactory.getNotes().success(function(data) { 
       $scope.notes = data.notes; 

       selectedNoteFactory.setCurrentNote($scope.notes[0]); 
      }); 
     } 

    $scope.onSelectNote = function(note){ 
     selectedNoteFactory.setCurrentNote(note); 
    } 
} 

控制器2 - 自我更新的变化,服务

function loadDetailControllar($scope, $timeout, selectedNoteFactory){ 

    $scope.note = {}; 

    $scope.$on('noteChanged', testme); 

    function testme(){ 

     $timeout(function(){ 
      $scope.note = selectedNoteFactory.note; 
     }, 500); 
    } 
} 

的Html

<div class="tagWidget" ng-app="tagWidget"> 
<div class="notelistcontainer floatleft" ng-controller="NoteListController" style="width: 20%; height: 100%;">  
      <div class="notelist" style="border: solid 5px grey;"> 
      <div class="noteitem greyborderbottom" ng-repeat="note in notes"> 
         <div class="paddinglefttwentypx notesubject attachdotdotdot widthhundredpercent" ng-click="onSelectNote(note)">{{::note.subject}}</div> 
        </div> 
       </div>   
      </div> 
      <div class="detailview floatright" ng-controller="DetailController" style="width: 60%; height: 100%;"> 
       <div class="paddinglefttwentypx notetext attachdotdotdot widthhundredpercent">{{::note.notehtmltext}}</div> 
      </div> 
     </div> 
     </div> 

注浆Cotroller,服务和指令

angular.module('tagWidget', []) 
    .factory('tagBasedNoteSearchService', loadTagBasedNoteSearchService) 
    .factory('NoteFactory', loadNoteFactory) 
    .factory('SelectedNoteFactory', loadSelectedNoteFactory) 
    .directive('editableDiv', loadEditableDiv) 
    .directive('toggleIcon', loadToggleIcon) 
    .controller('NoteListController', ['$scope', 'NoteFactory', 'tagBasedNoteSearchService', 'SelectedNoteFactory', loadNoteListControllar]) 
    .controller('DetailController', ['$scope', '$timeout', 'SelectedNoteFactory', loadDetailControllar]) 
'tagBasedNoteSearchService', 'SelectedNoteFactory', loadTagControllar]); 
+0

我们可以看到NoteFactory.getNotes()的代码吗?我认为超出范围的变量设置的问题可能在那里。 – bri

+0

@bri添加了NoteFactory服务代码。 –

+0

你的代码在哪里调用,或者说更好的说_injecting_'loadDetailControllar','loadNoteListControllar','loadNoteFactory'等等? –

回答

0

解决方案 - 从EXP删除:: ression {{::note.notehtmltext}}

相关问题