kre*_*eek 10 javascript angularjs angularjs-directive angularjs-scope angularjs-digest
我这里有一个小提琴:http://jsfiddle.net/KdkKE/44/
我想做的是创建一个'toggle'组件,基本上是一个自定义复选框,但如果它是真或假,则会更改html,它会绑定到控制器中的布尔值.
当用户单击切换时,模型会更新,指令的视图会发生变化.它类似于指令文档http://docs.angularjs.org/guide/directive末尾的示例,但状态将被绑定,以便在启动时正确.
var app = angular.module('App', []);
function Ctrl($scope) {
    $scope.init = function() {
        $scope.foo = true
    }
}
 app.directive('toggle', function() {
        return {
            restrict: 'E',
            replace: true,
            transclude: true,
            scope: {
                label: '@',
                ngModel: '='
            },
            template: 
                '<div style="cursor: hand; cursor: pointer">{{label}}: {{ngModel}}</div>',
            link: function(scope, element, attrs, controller) {
                element.bind('click', function() {
                    scope.ngModel = false;
                    attrs.$set('ngModel', false);
                    console.log('plz', attrs.ngModel);
                });
            }
        };
    });
-
<div ng-app="App">
    <div ng-controller="Ctrl" ng-init="init()">
        <p>Foo in Ctrl: {{foo}}</p>  
        <toggle label="Foo" ng-model="foo"></toggle>
    </div>    
</div>
Jay*_*com 20
我想你只是错过了使用$apply.看到它在这里工作:http://jsfiddle.net/4TnkE/
element.bind('click', function() {
    scope.$apply(function() {
        scope.ngModel = !scope.ngModel;
    });
});
它也可以像这样使用,以避免嵌套在另一个函数中:
element.bind('click', function() {
    scope.ngModel = !scope.ngModel;
    scope.$apply();
});
| 归档时间: | 
 | 
| 查看次数: | 23408 次 | 
| 最近记录: |