如何将范围放在指令中以在更改视图时停止丢失它

How can I put the scope in a directive to stop loosing it when changing views

本文关键字:视图 范围 指令      更新时间:2023-09-26

我的第一个Angular项目,我有点困惑。我有一个定义范围的滑块(我相信),但是当我切换视图时会丢失该范围。 我不确定如何将范围放入指令中,以便两个视图都可以访问它,我相信这是解决方案。


索引.html

<div ng-view></div>
<div id="footerContainer">
        <a href="#data">SWITCH VIEW</a>
    </div>
</div>

输入.html

<div id="wrapper">
  <div ng-controller="SomeController">
    <div id="sliderContainer">
      Price: {{price}}
      <div id="mySlider" slider config="sliderConfig" model="price" ng-model="price" class="slider"></div>
    </div>
  </div>

数据.html

<div ng-controller="SomeController">
  <div>
    Price: {{price}}
  </div>
</div>

主.js

var myApp = angular.module('myApp', ['ngRoute']);
myApp.config(['$routeProvider',
  function($routeProvider) {
    $routeProvider
      .when('/', {
        templateUrl: 'input.html'
      })
      .when('/data', {
        templateUrl: 'data.html'
      });
  }
]);
myApp.controller("SomeController", function($scope) {
  $scope.sliderConfig = {
    min: 1,
    max: 101,
    step: 10
  }
  $scope.price = 1;
  $scope.setPrice = function(price) {
    $scope.price = price;
  }
});

myApp.directive("slider", function() {
  return {
    restrict: 'A',
    scope: {
      config: "=config",
      price: "=model"
    },
    link: function(scope, elem, attrs) {
      var setModel = function(value) {
        scope.model = value;
      }
      $(elem).slider({
        range: false,
        min: scope.config.min,
        max: scope.config.max,
        step: scope.config.step,
        slide: function(event, ui) {
          scope.$apply(function() {
            scope.price = ui.value;
          });
        }
      });
    }
  }
});

你试过$rootScope吗?它是一个全局变量,所以如果你在rootScope中设置了一些东西,它可以通过应用程序访问,比如如果你设置,$rootScope.用户名 ,它可以在所有视图中访问。

切换视图时,angular 正在创建 SomeController 的新实例。 您需要将"price"值保留在某个位置,以便在主视图之间共享它,例如在外部(父)范围、上下文服务或其他一些全局可访问的数据结构中。