【问题标题】:Problems with isolated scope and bindings隔离范围和绑定的问题
【发布时间】:2017-02-02 04:14:45
【问题描述】:

我尝试构建指令,在该指令中我想在按元素单击时更改模型。某种复选框... 这是我的代码

mainApp.directive('subCategory', function(){
    return{
        restrict: 'A',
        scope: {
            model: '=?ngModel'
        },
        link : function(scope, element){

            scope.model = true;
            element.click(function () {

            if (element.hasClass('active')) {
                element.removeClass('active');
                scope.model = false;
            } else {
                element.addClass('active');
                scope.model = true;
            }

         });
        }
    } 
});

我尝试通过观察包含所有复选框的 ng-model 属性的对象来 $watch 父控制器中的此复选框组。

mainApp.controller('Filter',['$scope', function ($scope) {
$scope.data = {}

$scope.$watchCollection('data', function(newNames, oldNames) {
  console.log('changed');
});

}]);

当我通过scope.model = true; 定义属性时,它可以工作并且观看工作,但是当我在某些原因上单击更改scope.model 时,它不会影响data 对象并且观看不起作用。 谁能告诉我为什么?
谢谢!

【问题讨论】:

  • 使用ng-model 作为属性实例化ngModelController。该控制器可能正在与自定义指令作斗争。 ng- 前缀的使用保留给核心指令。有关详细信息,请参阅AngularJS Wiki - Best Practices
  • 谢谢@georgeawg!你是对的!

标签: javascript angularjs angularjs-directive javascript-databinding


【解决方案1】:

在您的指令更改中

 scope: {
        model: '=?ngModel'
    },

  scope: {
        model: '=ngModel'
    },

如上所述,当您将 ngModel 传递给链接函数时,即声明时

 require:'?ngModel'

【讨论】:

    猜你喜欢
    • 2015-08-02
    • 2017-09-22
    • 1970-01-01
    • 2015-12-08
    • 1970-01-01
    • 2014-12-26
    • 1970-01-01
    • 2013-05-15
    • 1970-01-01
    相关资源
    最近更新 更多