如何构建自定义ng-view指令,可能使用ng-includes?

时间:2013-05-23 17:27:09

标签: javascript html5 angularjs angularjs-directive

我正在创建一个具有详细视图的应用,该视图在主视图上方显示为模式窗口。每个都有一个URL,但如果直接从URL访问详细信息视图,我希望它显示为主视图。这个比喻在许多应用程序中使用,但是pinterest引脚是一个典型的例子(尝试点击一个引脚,然后重新加载页面以查看差异)。

从我收集的内容来看,常规路由器的功能不足以解决这个问题,因此我已经编写了自己的指令来替换ng-view。这是一个简化的代码示例:

app.directive('myModalView', ['$route', function($route) {
  return {
    link: function(scope, elem, attr) {
      var data = { modal: false };
      var first = true;
      scope.data = data;

      scope.$on('$routeChangeSuccess', function() {
        var current = $route.current.$$route;
        var template = current.templateUrl;

        data.modal = current.modal && !first;
        data.modal ? data.modalTemplate = template : data.mainTemplate = template;  

        first = false;
      });
    },
    template: '<div ng-include src="data.mainTemplate"></div>' +
              '<div ng-show="data.modal" ng-include src="data.modalTemplate"></div>',
  };
}]);

两个问题:

  • 这是正确的做法吗?是否有更多的角度&#39;这样做的方法?
  • 上述代码存在一个关键问题 - 如果两个URL使用相同的模板,则ng-include不会刷新。在某些情况下,我的控制器在初始化时检查URL参数并向视图提供不同的数据。有没有办法使ng-include刷新,重新初始化控制器,或做其他事情来处理这种情况?

谢谢!

1 个答案:

答案 0 :(得分:0)

您可能有兴趣查看UI-Router项目,它的目的是用多个嵌套或并行的ui-view元素替换ng-view