栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在指令中更改控制器作用域变量不会反映在控制器功能中

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在指令中更改控制器作用域变量不会反映在控制器功能中

它之所以不能立即显示更新的值,是因为2方式绑定仅在摘要周期内才更新父(或指令的使用者范围)范围的绑定值。摘要循环在触发ng-
click之后发生。因此

$scope.page
,控制器中尚未更新。您可以通过多种方式解决此问题,方法是使用
timeout
,它将延迟操作在摘要周期结束时运行。您也可以通过设置一个将值保存为2向绑定属性的对象来实现。由于2向绑定属性和父范围共享同一对象引用,因此您将立即看到更改。

方法1-使用超时:

  scope.incrementPage = function() {     scope.page += 1;     $timeout(scope.alertPage)  }

方法2-绑定对象:

 //In your controller $scope.page2 = {value:1};//In your directive scope.incrementPage = function() {     scope.page.value += 1;     scope.alertPage(); }

方法3-使用带有参数的函数绑定传递值:

//In your controller$scope.alertPage = function(val) {  alert(val);}

<!--In the view--><div incrementer page="page" alert-page="alertPage(page)"></div>

//In the directivescope.incrementPage = function() {     scope.page += 1;     scope.alertPage({page:scope.page}); }app = angular.module('app', []);app.controller('myCtrl', function($scope) {  $scope.page = 1;  $scope.page2 = {value:1};  $scope.alertPage = function() {    alert($scope.page);  }  $scope.alertPage2 = function() {    alert($scope.page2.value);  }})app.directive('incrementer', function($timeout) {  return {    scope: {      page: '=',      alertPage: '&',      page2:"=",      alertPage2: '&'    },    template: '<button ng-click="incrementPage()">increment page</button>',    link: function(scope, elem, attrs) {      scope.incrementPage = function() {          scope.page += 1;          scope.page2.value += 1;          $timeout(function(){ scope.alertPage() });          scope.alertPage2();      }    }  }})<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.5/angular.min.js"></script><div ng-app="app" ng-controller="myCtrl">  <div incrementer page="page" alert-page="alertPage()" page2="page2" alert-page2="alertPage2()"></div>  </div>


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/649608.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号