首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Angular.js指令隔离范围不起作用

Angular.js指令隔离范围不起作用
EN

Stack Overflow用户
提问于 2014-09-24 10:56:32
回答 2查看 7K关注 0票数 3

我正在建立一个角度指令。我将属性绑定到指令中的独立作用域,如

代码语言:javascript
复制
scope : {
   contentModel : '='
}

代码语言:javascript
复制
'use strict';

/**
 * Tc markdown directive
 */
var myapp = angular.module('myapp',[]);

myapp.directive('tcMarkdown',[function() {
  var directive = {};
  directive.restrict = 'E';
    directive.template = '<div><div class="row"><!--Content edit pane --><div class="col-md-12"><textarea class="form-control editor" ng-model="someobj.text.data"></textarea></div></div></div>{{contentModel}}';
  directive.scope = {
    contentModel : '='
  };

  directive.link = function(scope, element, attrs) {
    scope.options = {selected : 0};
    scope.$watch(function() {
      return scope.options.selected;
    }, function(newVal) {
      if(newVal===1) {
        scope.buttonCaption = {text : 'Edit'};
      } else if(newVal === 0) {
        scope.buttonCaption = {text : 'Preview'};
      }
    });
  };
  return directive;
}]);
代码语言:javascript
复制
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="myapp">
<data-tc-markdown content-model="content"></data-tc-markdown>
</div>

双向绑定不起作用。

当我在textarea中输入时,模型没有更新。

我错过了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-24 11:08:08

我看不出您是如何将内部contentModel绑定到textarea的。

这是一个更新工作小提琴

我将分配给ng-modelng-model替换为contentModel

代码语言:javascript
复制
  myapp.directive('tcMarkdown',[function() {
  var directive = {};
  directive.restrict = 'E';
    directive.template = '<div><div class="row"><!--Content edit pane --><div class="col-md-12"><textarea class="form-control editor" ng-model="contentModel"></textarea></div></div></div>';
  directive.scope = {
    contentModel : '='
  };

  directive.link = function(scope, element, attrs) {
    scope.options = {selected : 0};
    scope.$watch(function() {
      return scope.options.selected;
    }, function(newVal) {
      if(newVal===1) {
        scope.buttonCaption = {text : 'Edit'};
      } else if(newVal === 0) {
        scope.buttonCaption = {text : 'Preview'};
      }
    });
  };
  return directive;
}]);

然后,我取出{{contentModel}}以确保{{content}}在外部范围内绑定:

代码语言:javascript
复制
<div ng-app="myapp">
<data-tc-markdown content-model="content"></data-tc-markdown>
    {{content}}
</div>

这似乎很管用。

票数 1
EN

Stack Overflow用户

发布于 2014-09-24 11:29:51

应该在指令的外部范围上定义"content“变量。例如,参见下面的内容:我在外部控制器上定义了content1和content2。这些都包含了价值观本身。

http://jsfiddle.net/jajtzyhh/3/

代码语言:javascript
复制
var myapp = angular.module('myapp',[]).controller('MyController', ['$scope', function($scope) {
    $scope.content1 = 'Hello';
    $scope.content2 = 'World';
}]);


<div ng-app="myapp">
    <div ng-controller="MyController">
        <data-tc-markdown content-model="content1"></data-tc-markdown>
        <data-tc-markdown content-model="content2"></data-tc-markdown>
    </div>
</div>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26015140

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档