【问题标题】:Reuse Angular html view with different model each time每次重用具有不同模型的Angular html视图
【发布时间】:2018-12-21 19:49:40
【问题描述】:

我目前正在开发一个 AngularJS 应用程序,它提供了一个带有不同滑块的视图,允许用户在 preferences.html 文件中指定首选项(使用 Angular Material)。现在我想扩展这个应用程序以允许不同的用户同时使用它。这意味着preferences.html 会显示多次,每个用户一个实例。但是,每次调用 preferences.html 时,都应该将首选项发送到另一个 ng-model。

到目前为止,我的代码如下所示(单个用户的偏好获取):

preferences.html:

<div ng-controller="myController as myCtrl">
  <div layout="row">
    <h2>One</h2>
    <md-slider class="preference-slider" min="0" step="1" max="20" ng-model="myCtrl.preferenceOne" id="slider"></md-slider>
    <p class="preference-value">{{myCtrl.preferenceOne}}</p>
    <h2>Two</h2>
    <md-slider class="preference-slider" min="0" step="1" max="20" ng-model="myCtrl.preferencesTwo" id="slider"></md-slider>
    <p class="preference-value">{{myCtrl.preferencesTwo}}</p>
  </div> 
</div>

我的控制器:

var app = angular.module('myApp');
app.controller('myController', function($rootScope, $scope, $filter, $timeout) {
  this.PreferenceOne = 10;
  this.PreferenceTwo = 10;
  ...
});

每个用户的偏好视图应该同时显示,如下所示:

<div ng-include="preferences.html" ng-show="isReady"></div> (for User 1)
<div ng-include="preferences.html" ng-show="isReady"></div> (for User 2)
...

我发现类似问题的解决方案使用指令,但他们总是尝试只使用一个视图和多个模型。但是,我希望拥有多个视图实例,并且每个实例都应使用不同的ng-model。最终我想收集所有模型/视图的值并将它们发送到后端。

【问题讨论】:

  • 将每一个绑定到不同的路由,例如.. yourUrl/instance/1 并将该路由参数传递给控制器​​。每个控制器都将从同一个控制器实例化,只是具有不同的 url,因此使用 angular-ui-router 形成不同的状态。当报告回来时,每个人都会将所述参数作为其标识符传递?
  • 感谢您的评论。据我正确理解,UI-Router 只允许将一种状态加载到视口中。我想同时多次显示同一个 html 文件的多个实例(使用不同的模型)。我更新了我原来的帖子来说明这一点。
  • 我很害怕。您将不得不编写自定义的霸王控制器,然后将使用静态 HTML,或者如果您同时拥有的数量不是静态的甚至是动态的,然后将控制器绑定为霸王应该产生的跳虫。我将从静态 html 和 2 个在其中活动的控制器开始,同时从霸主静态生成,然后尝试从那里移动。

标签: angularjs angularjs-directive angularjs-material


【解决方案1】:

如果您使用 ui-router 命名视图,并将每个视图连接到相同的“preferences.html”模板和“preferencesController”或其他什么,那会起作用吗?每个实例本质上是一个单一的表单,并且屏幕可以同时允许多个活动用户(例如,单屏触摸屏信息亭)?

<ui-view name="user1" />
<ui-view name="user2" />
etc.

最终你的要求是“让我成为指令”,但如果你出于某种原因想要这样做,我理解。我也喜欢偷工减料。

编辑!

试试这个:

$stateProvider      
  .state('multiUser',{      
    views: {        
      'user1': {        
        templateUrl: 'preferences.html',        
        controller: 'preferencesController'     
      },        
      'user2': {        
        templateUrl: 'preferences.html',        
        controller: 'preferencesController'     
      }     
    }       
  })

我从来没有亲自这样做过,但我相信它会为每个命名视图实例化一个新的控制器实例,而不是“共享”一个控制器实例。

【讨论】:

  • 是的,您的触摸屏信息亭示例正是我的意思。我尝试使用 angular-ui-router 让它工作,但我找不到为每个用户重用相同 html 文件但将输入存储在不同变量中的解决方案。
猜你喜欢
  • 1970-01-01
  • 2020-08-07
  • 1970-01-01
  • 1970-01-01
  • 2016-11-30
  • 2014-03-15
  • 1970-01-01
  • 2020-05-07
  • 1970-01-01
相关资源
最近更新 更多