如何提醒视图显示数据

时间:2016-06-25 15:30:45

标签: javascript angularjs asp.net-mvc asp.net-mvc-4 razor

我是angularjs的新手。我刚开始创建一个示例应用程序。请帮我提一下你的建议。

以下是我的示例应用程序。

Sample application

以下是创建的页面:

  1. 页面 - > Notes.cshtml / notesController.js
  2. NotesList - > NotesList.cshtml / notesListController.js
  3. AddNote - > AddNote.cshtml / addNotecontroller.js
  4. ViewNote - > ViewNote.cshtml / viewNoteController.js
  5. 当用户从noteslist中选择一个笔记时,我想在右侧加载细节(在ViewNote.cshtml中)。请注意,我一次只能显示添加注释或查看注释。因此,我使用ng-show来显示/隐藏各自的部分控件。

    我的问题:

    1. 当我点击备注列表中的备注时,我正在调用服务器以使用service.js获取备注详细信息。据我所知,共享数据黑白控制器的最佳方式是使用服务。因此,我将获取的数据保存在服务对象中。
      1. 现在,我想 intimate view.cshtml 来加载提取的数据。
      2. 我应该在 service.js 中使用$ emit或$ broadcast来隐藏 ViewNoteController.js 吗?
      3. 我将服务对象注入ViewNoteController.js
    2. 有没有更好的方法来处理这种情况?请建议。

1 个答案:

答案 0 :(得分:0)

你不能在角度服务实例中使用$ scope,因此$ emit或$ broadcast将不起作用。

您可以使用以下解决方案:

service.js

this.fetchData = function(url, successHandler, failureHandler) {
    $http.get(url).then(function(response) {successHandler(response);}, function() {});
}

notesListController.js

function($scope, $rootScope, service) {

 $scope.loadList = function() {
    service.fetchData('someurl', fetchDataSuccessHandler, angular.noop);  
 }

 function fetchDataSuccessHandler(response) {
      var list = response.data;
      $rootScope.$broadcast('load-data', list);

 } 

}

ViewNoteController.js

$scope.$on('load-data', function(event, list) {
    // add the code to load the view
});